Android 实现桌面未读角标
在小米三星 索尼手机:图标上显示数字(未读消息数):这部分代码,是从QQ5.0.apk中找的。
小米已经测试通过了,
三星和索尼的,由于没有相应的手机,没有测试,有的,可能修改一下代码(判断是什么手机的代码),
测试一下,可以在回复一下测试结果,谢谢
1.原生系统(原生的Launcher),只能修改快捷方式,增加和删除都会有toast提示
2.小米三星 索尼手机:自定义的launcher: 发送显示未读消息数的action已经不同了。具体可以去看代码。。。
判断手机的代码:
/***
*在应用图标的快捷方式上加数字
*@paramclazz启动的activity
*@paramisShowNum是否显示数字
*@paramnum显示的数字:整型
*@paramisStroke是否加上边框
*
*/
publicstaticvoidaddNumShortCut(Contextcontext,Class>clazz,booleanisShowNum,Stringnum,booleanisStroke)
{
Log.e(TAG,"manufacturer="+Build.MANUFACTURER);
if(Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){
//小米
xiaoMiShortCut(context,clazz,num);
}elseif(Build.MANUFACTURER.equalsIgnoreCase("samsung")){
//三星
samsungShortCut(context,num);
}else{//其他原生系统手机
installRawShortCut(context,MainActivity.class,isShowNum,num,isStroke);
}
}
下面写好的工具类,上面的方法也在其中。
/***
*应用的快捷方式工具类
*
*@authoryang
*
*/
publicclassAppShortCutUtil{
privatestaticfinalStringTAG="AppShortCutUtil";
//默认圆角半径
privatestaticfinalintDEFAULT_CORNER_RADIUS_DIP=8;
//默认边框宽度
privatestaticfinalintDEFAULT_STROKE_WIDTH_DIP=2;
//边框的颜色
privatestaticfinalintDEFAULT_STROKE_COLOR=Color.WHITE;
//中间数字的颜色
privatestaticfinalintDEFAULT_NUM_COLOR=Color.parseColor("#CCFF0000");
/***
*
*生成有数字的图片(没有边框)
*@paramcontext
*@paramicon图片
*@paramisShowNum是否要绘制数字
*@paramnum数字字符串:整型数字超过99,显示为"99+"
*@return
*/
publicstaticBitmapgeneratorNumIcon(Contextcontext,Bitmapicon,booleanisShowNum,Stringnum){
DisplayMetricsdm=context.getResources().getDisplayMetrics();
//基准屏幕密度
floatbaseDensity=1.5f;//240dpi
floatfactor=dm.density/baseDensity;
Log.e(TAG,"density:"+dm.density);
Log.e(TAG,"dpi:"+dm.densityDpi);
Log.e(TAG,"factor:"+factor);
//初始化画布
inticonSize=(int)context.getResources().getDimension(android.R.dimen.app_icon_size);
BitmapnumIcon=Bitmap.createBitmap(iconSize,iconSize,Config.ARGB_8888);
Canvascanvas=newCanvas(numIcon);
//拷贝图片
PainticonPaint=newPaint();
iconPaint.setDither(true);//防抖动
iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
Rectsrc=newRect(0,0,icon.getWidth(),icon.getHeight());
Rectdst=newRect(0,0,iconSize,iconSize);
canvas.drawBitmap(icon,src,dst,iconPaint);
if(isShowNum){
if(TextUtils.isEmpty(num)){
num="0";
}
if(!TextUtils.isDigitsOnly(num)){
//非数字
Log.e(TAG,"thenumisnotdigit:"+num);
num="0";
}
intnumInt=Integer.valueOf(num);
if(numInt>99){//超过99
num="99+";
//启用抗锯齿和使用设备的文本字体大小
PaintnumPaint=newPaint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);
numPaint.setColor(Color.WHITE);
numPaint.setTextSize(20f*factor);
numPaint.setTypeface(Typeface.DEFAULT_BOLD);
inttextWidth=(int)numPaint.measureText(num,0,num.length());
Log.e(TAG,"textwidth:"+textWidth);
intcircleCenter=(int)(15*factor);//中心坐标
intcircleRadius=(int)(13*factor);//圆的半径
//绘制左边的圆形
PaintleftCirPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
leftCirPaint.setColor(Color.RED);
canvas.drawCircle(iconSize-circleRadius-textWidth+(10*factor),circleCenter,circleRadius,leftCirPaint);
//绘制右边的圆形
PaintrightCirPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
rightCirPaint.setColor(Color.RED);
canvas.drawCircle(iconSize-circleRadius,circleCenter,circleRadius,rightCirPaint);
//绘制中间的距形
PaintrectPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
rectPaint.setColor(Color.RED);
RectFoval=newRectF(iconSize-circleRadius-textWidth+(10*factor),2*factor,iconSize-circleRadius,circleRadius*2+2*factor);
canvas.drawRect(oval,rectPaint);
//绘制数字
canvas.drawText(num,(float)(iconSize-textWidth/2-(24*factor)),23*factor,numPaint);
}else{//<=99
//启用抗锯齿和使用设备的文本字体大小
PaintnumPaint=newPaint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);
numPaint.setColor(Color.WHITE);
numPaint.setTextSize(20f*factor);
numPaint.setTypeface(Typeface.DEFAULT_BOLD);
inttextWidth=(int)numPaint.measureText(num,0,num.length());
Log.e(TAG,"textwidth:"+textWidth);
//绘制外面的圆形
//PaintoutCirPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
//outCirPaint.setColor(Color.WHITE);
//canvas.drawCircle(iconSize-15,15,15,outCirPaint);
//绘制内部的圆形
PaintinCirPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
inCirPaint.setColor(Color.RED);
canvas.drawCircle(iconSize-15*factor,15*factor,15*factor,inCirPaint);
//绘制数字
canvas.drawText(num,(float)(iconSize-textWidth/2-15*factor),22*factor,numPaint);
}
}
returnnumIcon;
}
/***
*
*生成有数字的图片(没有边框)
*@paramcontext
*@paramicon图片
*@paramisShowNum是否要绘制数字
*@paramnum数字字符串:整型数字超过99,显示为"99+"
*@return
*/
publicstaticBitmapgeneratorNumIcon2(Contextcontext,Bitmapicon,booleanisShowNum,Stringnum){
DisplayMetricsdm=context.getResources().getDisplayMetrics();
//基准屏幕密度
floatbaseDensity=1.5f;//240dpi
floatfactor=dm.density/baseDensity;
Log.e(TAG,"density:"+dm.density);
Log.e(TAG,"dpi:"+dm.densityDpi);
Log.e(TAG,"factor:"+factor);
//初始化画布
inticonSize=(int)context.getResources().getDimension(android.R.dimen.app_icon_size);
BitmapnumIcon=Bitmap.createBitmap(iconSize,iconSize,Config.ARGB_8888);
Canvascanvas=newCanvas(numIcon);
//拷贝图片
PainticonPaint=newPaint();
iconPaint.setDither(true);//防抖动
iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
Rectsrc=newRect(0,0,icon.getWidth(),icon.getHeight());
Rectdst=newRect(0,0,iconSize,iconSize);
canvas.drawBitmap(icon,src,dst,iconPaint);
if(isShowNum){
if(TextUtils.isEmpty(num)){
num="0";
}
if(!TextUtils.isDigitsOnly(num)){
//非数字
Log.e(TAG,"thenumisnotdigit:"+num);
num="0";
}
intnumInt=Integer.valueOf(num);
if(numInt>99){//超过99
num="99+";
}
//启用抗锯齿和使用设备的文本字体大小
//测量文本占用的宽度
PaintnumPaint=newPaint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);
numPaint.setColor(Color.WHITE);
numPaint.setTextSize(20f*factor);
numPaint.setTypeface(Typeface.DEFAULT_BOLD);
inttextWidth=(int)numPaint.measureText(num,0,num.length());
Log.e(TAG,"textwidth:"+textWidth);
/**----------------------------------*
*TODO绘制圆角矩形背景start
*------------------------------------*/
//圆角矩形背景的宽度
intbackgroundHeight=(int)(2*15*factor);
intbackgroundWidth=textWidth>backgroundHeight?(int)(textWidth+10*factor):backgroundHeight;
canvas.save();//保存状态
ShapeDrawabledrawable=getDefaultBackground(context);
drawable.setIntrinsicHeight(backgroundHeight);
drawable.setIntrinsicWidth(backgroundWidth);
drawable.setBounds(0,0,backgroundWidth,backgroundHeight);
canvas.translate(iconSize-backgroundWidth,0);
drawable.draw(canvas);
canvas.restore();//重置为之前保存的状态
/**----------------------------------*
*TODO绘制圆角矩形背景end
*------------------------------------*/
//绘制数字
canvas.drawText(num,(float)(iconSize-(backgroundWidth+textWidth)/2),22*factor,numPaint);
}
returnnumIcon;
}
/***
*
*生成有数字的图片(有边框)
*@paramcontext
*@paramicon图片
*@paramisShowNum是否要绘制数字
*@paramnum数字字符串:整型数字超过99,显示为"99+"
*@return
*/
publicstaticBitmapgeneratorNumIcon3(Contextcontext,Bitmapicon,booleanisShowNum,Stringnum){
DisplayMetricsdm=context.getResources().getDisplayMetrics();
//基准屏幕密度
floatbaseDensity=1.5f;//240dpi
floatfactor=dm.density/baseDensity;
Log.e(TAG,"density:"+dm.density);
Log.e(TAG,"dpi:"+dm.densityDpi);
Log.e(TAG,"factor:"+factor);
//初始化画布
inticonSize=(int)context.getResources().getDimension(android.R.dimen.app_icon_size);
BitmapnumIcon=Bitmap.createBitmap(iconSize,iconSize,Config.ARGB_8888);
Canvascanvas=newCanvas(numIcon);
//拷贝图片
PainticonPaint=newPaint();
iconPaint.setDither(true);//防抖动
iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
Rectsrc=newRect(0,0,icon.getWidth(),icon.getHeight());
Rectdst=newRect(0,0,iconSize,iconSize);
canvas.drawBitmap(icon,src,dst,iconPaint);
if(isShowNum){
if(TextUtils.isEmpty(num)){
num="0";
}
if(!TextUtils.isDigitsOnly(num)){
//非数字
Log.e(TAG,"thenumisnotdigit:"+num);
num="0";
}
intnumInt=Integer.valueOf(num);
if(numInt>99){//超过99
num="99+";
}
//启用抗锯齿和使用设备的文本字体大小
//测量文本占用的宽度
PaintnumPaint=newPaint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);
numPaint.setColor(Color.WHITE);
numPaint.setTextSize(20f*factor);
numPaint.setTypeface(Typeface.DEFAULT_BOLD);
inttextWidth=(int)numPaint.measureText(num,0,num.length());
Log.e(TAG,"textwidth:"+textWidth);
/**----------------------------------*
*TODO绘制圆角矩形背景:先画边框,再画内部的圆角矩形start
*------------------------------------*/
//圆角矩形背景的宽度
intbackgroundHeight=(int)(2*15*factor);
intbackgroundWidth=textWidth>backgroundHeight?(int)(textWidth+10*factor):backgroundHeight;
//边框的宽度
intstrokeThickness=(int)(2*factor);
canvas.save();//保存状态
intstrokeHeight=backgroundHeight+strokeThickness*2;
intstrokeWidth=textWidth>strokeHeight?(int)(textWidth+10*factor+2*strokeThickness):strokeHeight;
ShapeDrawableoutStroke=getDefaultStrokeDrawable(context);
outStroke.setIntrinsicHeight(strokeHeight);
outStroke.setIntrinsicWidth(strokeWidth);
outStroke.setBounds(0,0,strokeWidth,strokeHeight);
canvas.translate(iconSize-strokeWidth-strokeThickness,strokeThickness);
outStroke.draw(canvas);
canvas.restore();//重置为之前保存的状态
canvas.save();//保存状态
ShapeDrawabledrawable=getDefaultBackground(context);
drawable.setIntrinsicHeight((int)(backgroundHeight+2*factor));
drawable.setIntrinsicWidth((int)(backgroundWidth+2*factor));
drawable.setBounds(0,0,backgroundWidth,backgroundHeight);
canvas.translate(iconSize-backgroundWidth-2*strokeThickness,2*strokeThickness);
drawable.draw(canvas);
canvas.restore();//重置为之前保存的状态
/**----------------------------------*
*TODO绘制圆角矩形背景end
*------------------------------------*/
//绘制数字
canvas.drawText(num,(float)(iconSize-(backgroundWidth+textWidth+4*strokeThickness)/2),(22)*factor+2*strokeThickness,numPaint);
}
returnnumIcon;
}
/***
*
*生成有数字的图片(有边框的)
*@paramcontext
*@paramicon图片
*@paramisShowNum是否要绘制数字
*@paramnum数字字符串:整型数字超过99,显示为"99+"
*@return
*/
publicstaticBitmapgeneratorNumIcon4(Contextcontext,Bitmapicon,booleanisShowNum,Stringnum){
DisplayMetricsdm=context.getResources().getDisplayMetrics();
//基准屏幕密度
floatbaseDensity=1.5f;//240dpi
floatfactor=dm.density/baseDensity;
Log.e(TAG,"density:"+dm.density);
Log.e(TAG,"dpi:"+dm.densityDpi);
Log.e(TAG,"factor:"+factor);
//初始化画布
inticonSize=(int)context.getResources().getDimension(android.R.dimen.app_icon_size);
BitmapnumIcon=Bitmap.createBitmap(iconSize,iconSize,Config.ARGB_8888);
Canvascanvas=newCanvas(numIcon);
//拷贝图片
PainticonPaint=newPaint();
iconPaint.setDither(true);//防抖处理
iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
Rectsrc=newRect(0,0,icon.getWidth(),icon.getHeight());
Rectdst=newRect(0,0,iconSize,iconSize);
canvas.drawBitmap(icon,src,dst,iconPaint);
if(isShowNum){
if(TextUtils.isEmpty(num)){
num="0";
}
if(!TextUtils.isDigitsOnly(num)){
//非数字
Log.e(TAG,"thenumisnotdigit:"+num);
num="0";
}
intnumInt=Integer.valueOf(num);
if(numInt>99){//超过99
num="99+";
}
//启用抗锯齿和使用设备的文本字体
//测量文本占用的宽度
PaintnumPaint=newPaint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);
numPaint.setColor(Color.WHITE);
numPaint.setTextSize(25f*factor);
numPaint.setTypeface(Typeface.DEFAULT_BOLD);
inttextWidth=(int)numPaint.measureText(num,0,num.length());
Log.e(TAG,"textwidth:"+textWidth);
/**----------------------------------*
*TODO绘制圆角矩形背景start
*------------------------------------*/
//边框的宽度
intstrokeThickness=(int)(DEFAULT_STROKE_WIDTH_DIP*factor);
//圆角矩形背景的宽度
floatradiusPx=15*factor;
intbackgroundHeight=(int)(2*(radiusPx+strokeThickness));//2*(半径+边框宽度)
intbackgroundWidth=textWidth>backgroundHeight?(int)(textWidth+10*factor+2*strokeThickness):backgroundHeight;
canvas.save();//保存状态
ShapeDrawabledrawable=getDefaultBackground2(context);
drawable.setIntrinsicHeight(backgroundHeight);
drawable.setIntrinsicWidth(backgroundWidth);
drawable.setBounds(0,0,backgroundWidth,backgroundHeight);
canvas.translate(iconSize-backgroundWidth-strokeThickness,2*strokeThickness);
drawable.draw(canvas);
canvas.restore();//重置为之前保存的状态
/**----------------------------------*
*TODO绘制圆角矩形背景end
*------------------------------------*/
//绘制数字
canvas.drawText(num,(float)(iconSize-(backgroundWidth+textWidth+2*strokeThickness)/2),(float)(25*factor+2.5*strokeThickness),numPaint);
}
returnnumIcon;
}
/***
*创建原生系统的快捷方式
*@paramcontext
*@paramclazz启动的activity
*@paramisShowNum是否显示数字
*@paramnum显示的数字:整型
*@paramisStroke是否加上边框
*/
publicstaticvoidinstallRawShortCut(Contextcontext,Class>clazz,booleanisShowNum,Stringnum,booleanisStroke){
Log.e(TAG,"installShortCut....");
IntentshortcutIntent=newIntent("com.android.launcher.action.INSTALL_SHORTCUT");
//名称
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,context.getString(R.string.app_name));
//是否可以有多个快捷方式的副本,参数如果是true就可以生成多个快捷方式,如果是false就不会重复添加
shortcutIntent.putExtra("duplicate",false);
//点击快捷方式:打开activity
IntentmainIntent=newIntent(Intent.ACTION_MAIN);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mainIntent.setClass(context,clazz);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,mainIntent);
//快捷方式的图标
if(isStroke){
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON,
generatorNumIcon4(
context,
((BitmapDrawable)context.getResources().getDrawable(R.drawable.ic_launcher)).getBitmap(),
isShowNum,
num));
}else{
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON,
generatorNumIcon2(
context,
((BitmapDrawable)context.getResources().getDrawable(R.drawable.ic_launcher)).getBitmap(),
isShowNum,
num));
}
context.sendBroadcast(shortcutIntent);
}
/***
*是否已经创建了快捷方式
*@paramcontext
*@return
*/
publicstaticbooleanisAddShortCut(Contextcontext){
Log.e(TAG,"isAddShortCut....");
booleanisInstallShortcut=false;
finalContentResolvercr=context.getContentResolver();
//TODO注释的代码,在有的手机:修改了ROM的系统,不能支持
/*intversionLevel=android.os.Build.VERSION.SDK_INT;
StringAUTHORITY="com.android.launcher2.settings";
//2.2以上的系统的文件文件名字是不一样的
if(versionLevel>=8){
AUTHORITY="com.android.launcher2.settings";
}else{
AUTHORITY="com.android.launcher.settings";
}*/
StringAUTHORITY=getAuthorityFromPermission(context,"com.android.launcher.permission.READ_SETTINGS");
Log.e(TAG,"AUTHORITY:"+AUTHORITY);
finalUriCONTENT_URI=Uri.parse("content://"+AUTHORITY
+"/favorites?notify=true");
Cursorc=cr.query(CONTENT_URI,
newString[]{"title"},"title=?",
newString[]{context.getString(R.string.app_name)},null);
if(c!=null&&c.getCount()>0){
isInstallShortcut=true;
}
if(c!=null){
c.close();
}
Log.e(TAG,"isAddShortCut....isInstallShortcut="+isInstallShortcut);
returnisInstallShortcut;
}
/**
*删除快捷方式
*@paramcontext
*@paramclazz
*/
publicstaticvoiddeleteShortCut(Contextcontext,Class>clazz){
Log.e(TAG,"delShortcut....");
if(Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){
//小米
//当为""时,不显示数字,相当于隐藏了)
xiaoMiShortCut(context,clazz,"");
}elseif(Build.MANUFACTURER.equalsIgnoreCase("samsung")){
//三星
samsungShortCut(context,"0");
}else{//其他原生系统手机
//删除显示数字的快捷方式
deleteRawShortCut(context,clazz);
//安装不显示数字的快捷方式
//installRawShortCut(context,clazz,false,"0");
}
}
/***
*删除原生系统的快捷方式
*@paramcontext
*@paramclazz启动的activity
*/
publicstaticvoiddeleteRawShortCut(Contextcontext,Class>clazz){
Intentintent=newIntent("com.android.launcher.action.UNINSTALL_SHORTCUT");
//快捷方式的名称
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,context.getString(R.string.app_name));
Intentintent2=newIntent();
intent2.setClass(context,clazz);
intent2.setAction(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_LAUNCHER);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent2);
context.sendBroadcast(intent);
}
/***
*取得权限相应的认证URI
*@paramcontext
*@parampermission
*@return
*/
publicstaticStringgetAuthorityFromPermission(Contextcontext,Stringpermission){
if(TextUtils.isEmpty(permission)){
returnnull;
}
ListpackInfos=context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);
if(packInfos==null){
returnnull;
}
for(PackageInfoinfo:packInfos){
ProviderInfo[]providers=info.providers;
if(providers!=null){
for(ProviderInfoprovider:providers){
if(permission.equals(provider.readPermission)
||permission.equals(provider.writePermission)){
returnprovider.authority;
}
}
}
}
returnnull;
}
/***
*在小米应用图标的快捷方式上加数字
*
*
*@paramcontext
*@paramnum显示的数字:大于99,为"99",当为""时,不显示数字,相当于隐藏了)
*
*注意点:
*context.getPackageName()+"/."+clazz.getSimpleName()(这个是启动activity的路径)中的"/."不能缺少
*
*/
publicstaticvoidxiaoMiShortCut(Contextcontext,Class>clazz,Stringnum)
{
Log.e(TAG,"xiaoMiShortCut....");
IntentlocalIntent=newIntent("android.intent.action.APPLICATION_MESSAGE_UPDATE");
localIntent.putExtra("android.intent.extra.update_application_component_name",context.getPackageName()+"/."+clazz.getSimpleName());
if(TextUtils.isEmpty(num)){
num="";
}else{
intnumInt=Integer.valueOf(num);
if(numInt>0){
if(numInt>99){
num="99";
}
}else{
num="0";
}
}
localIntent.putExtra("android.intent.extra.update_application_message_text",num);
context.sendBroadcast(localIntent);
}
/***
*索尼手机:应用图标的快捷方式上加数字
*@paramcontext
*@paramnum
*/
publicstaticvoidsonyShortCut(Contextcontext,Stringnum)
{
StringactivityName=getLaunchActivityName(context);
if(activityName==null){
return;
}
IntentlocalIntent=newIntent();
intnumInt=Integer.valueOf(num);
booleanisShow=true;
if(numInt<1){
num="";
isShow=false;
}elseif(numInt>99){
num="99";
}
localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE",isShow);
localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME",activityName);
localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE",num);
localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME",context.getPackageName());
context.sendBroadcast(localIntent);
}
/***
*三星手机:应用图标的快捷方式上加数字
*@paramcontext
*@paramnum
*/
publicstaticvoidsamsungShortCut(Contextcontext,Stringnum)
{
intnumInt=Integer.valueOf(num);
if(numInt<1)
{
num="0";
}elseif(numInt>99){
num="99";
}
StringactivityName=getLaunchActivityName(context);
IntentlocalIntent=newIntent("android.intent.action.BADGE_COUNT_UPDATE");
localIntent.putExtra("badge_count",num);
localIntent.putExtra("badge_count_package_name",context.getPackageName());
localIntent.putExtra("badge_count_class_name",activityName);
context.sendBroadcast(localIntent);
}
/***
*在应用图标的快捷方式上加数字
*@paramclazz启动的activity
*@paramisShowNum是否显示数字
*@paramnum显示的数字:整型
*@paramisStroke是否加上边框
*
*/
publicstaticvoidaddNumShortCut(Contextcontext,Class>clazz,booleanisShowNum,Stringnum,booleanisStroke)
{
Log.e(TAG,"manufacturer="+Build.MANUFACTURER);
if(Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){
//小米
xiaoMiShortCut(context,clazz,num);
}elseif(Build.MANUFACTURER.equalsIgnoreCase("samsung")){
//三星
samsungShortCut(context,num);
}else{//其他原生系统手机
installRawShortCut(context,MainActivity.class,isShowNum,num,isStroke);
}
}
/***
*取得当前应用的启动activity的名称:
*mainfest.xml中配置的android:name:"
*@paramcontext
*@return
*/
publicstaticStringgetLaunchActivityName(Contextcontext)
{
PackageManagerlocalPackageManager=context.getPackageManager();
IntentlocalIntent=newIntent("android.intent.action.MAIN");
localIntent.addCategory("android.intent.category.LAUNCHER");
try
{
IteratorlocalIterator=localPackageManager.queryIntentActivities(localIntent,0).iterator();
while(localIterator.hasNext())
{
ResolveInfolocalResolveInfo=localIterator.next();
if(!localResolveInfo.activityInfo.applicationInfo.packageName.equalsIgnoreCase(context.getPackageName()))
continue;
Stringstr=localResolveInfo.activityInfo.name;
returnstr;
}
}
catch(ExceptionlocalException)
{
returnnull;
}
returnnull;
}
/***
*得到一个默认的背景:圆角矩形
*使用代码来生成一个背景:相当于用的xml的背景
*
*@return
*/
privatestaticShapeDrawablegetDefaultBackground(Contextcontext){
//这个是为了应对不同分辨率的手机,屏幕兼容性
intr=dipToPixels(context,DEFAULT_CORNER_RADIUS_DIP);
float[]outerR=newfloat[]{r,r,r,r,r,r,r,r};
//圆角矩形
RoundRectShaperr=newRoundRectShape(outerR,null,null);
ShapeDrawabledrawable=newShapeDrawable(rr);
drawable.getPaint().setColor(DEFAULT_NUM_COLOR);//设置颜色
returndrawable;
}
/***
*得到一个默认的背景:圆角矩形
*使用代码来生成一个背景:相当于用的xml的背景
*
*@return
*/
privatestaticShapeDrawablegetDefaultBackground2(Contextcontext){
//这个是为了应对不同分辨率的手机,屏幕兼容性
intr=dipToPixels(context,DEFAULT_CORNER_RADIUS_DIP);
float[]outerR=newfloat[]{r,r,r,r,r,r,r,r};
intdistance=dipToPixels(context,DEFAULT_STROKE_WIDTH_DIP);
//圆角矩形
RoundRectShaperr=newRoundRectShape(outerR,null,null);
customBorderDrawabledrawable=newcustomBorderDrawable(context,rr);
drawable.getFillpaint().setColor(DEFAULT_NUM_COLOR);//设置填充颜色
drawable.getStrokepaint().setColor(DEFAULT_STROKE_COLOR);//设置边框颜色
drawable.getStrokepaint().setStrokeWidth(distance);//设置边框宽度
returndrawable;
}
/***
*得到一个默认的背景:圆角矩形
*使用代码来生成一个背景:相当于用的xml的背景
*
*@return
*/
privatestaticShapeDrawablegetDefaultStrokeDrawable(Contextcontext){
//这个是为了应对不同分辨率的手机,屏幕兼容性
intr=dipToPixels(context,DEFAULT_CORNER_RADIUS_DIP);
intdistance=dipToPixels(context,DEFAULT_STROKE_WIDTH_DIP);
float[]outerR=newfloat[]{r,r,r,r,r,r,r,r};
//圆角矩形
RoundRectShaperr=newRoundRectShape(outerR,null,null);
ShapeDrawabledrawable=newShapeDrawable(rr);
drawable.getPaint().setStrokeWidth(distance);
drawable.getPaint().setStyle(Paint.Style.FILL);
drawable.getPaint().setColor(DEFAULT_STROKE_COLOR);//设置颜色
returndrawable;
}
/***
*dptopx
*@paramdip
*@return
*/
publicstaticintdipToPixels(Contextcontext,intdip){
Resourcesr=context.getResources();
floatpx=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dip,r.getDisplayMetrics());
return(int)px;
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!