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; } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!