在小米 三星 索尼 手机 :图标上显示数字(未读消息数):这部分代码,是从QQ5.0.apk中找的。
小米已经测试通过了,
三星和索尼的,由于没有相应的手机,没有测试,有的,可能修改一下代码(判断是什么手机的代码),
测试一下,可以在回复一下测试结果,谢谢
1.原生系统(原生的 Launcher ),只能修改快捷方式,增加和删除都会有toast提示
2.小米 三星 索尼 手机: 自定义的launcher: 发送显示未读消息数的action已经不同了。具体可以去看代码。。。
下面写好的工具类,上面的方法也在其中。
小米已经测试通过了,
三星和索尼的,由于没有相应的手机,没有测试,有的,可能修改一下代码(判断是什么手机的代码),
测试一下,可以在回复一下测试结果,谢谢
1.原生系统(原生的 Launcher ),只能修改快捷方式,增加和删除都会有toast提示
2.小米 三星 索尼 手机: 自定义的launcher: 发送显示未读消息数的action已经不同了。具体可以去看代码。。。
判断手机的代码:
/***
* 在应用图标的快捷方式上加数字
* @param clazz 启动的activity
* @param isShowNum 是否显示数字
* @param num 显示的数字:整型
* @param isStroke 是否加上边框
*
*/
public static void addNumShortCut(Context context,Class<?> clazz,boolean isShowNum, String num, boolean isStroke)
{
Log.e(TAG, "manufacturer="+Build.MANUFACTURER);
if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){
//小米
xiaoMiShortCut(context, clazz, num);
}else if(Build.MANUFACTURER.equalsIgnoreCase("samsung")){
//三星
samsungShortCut(context, num);
}else {//其他原生系统手机
installRawShortCut(context, MainActivity.class, isShowNum, num, isStroke);
}
}
下面写好的工具类,上面的方法也在其中。
/***
* 应用的快捷方式工具类
*
* @author yang
*
*/
public class AppShortCutUtil {
private static final String TAG = "AppShortCutUtil";
//默认圆角半径
private static final int DEFAULT_CORNER_RADIUS_DIP = 8;
//默认边框宽度
private static final int DEFAULT_STROKE_WIDTH_DIP = 2;
//边框的颜色
private static final int DEFAULT_STROKE_COLOR = Color.WHITE;
//中间数字的颜色
private static final int DEFAULT_NUM_COLOR = Color.parseColor("#CCFF0000");
/***
*
* 生成有数字的图片(没有边框)
* @param context
* @param icon 图片
* @param isShowNum 是否要绘制数字
* @param num 数字字符串:整型数字 超过99,显示为"99+"
* @return
*/
public static Bitmap generatorNumIcon(Context context, Bitmap icon, boolean isShowNum, String num) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
//基准屏幕密度
float baseDensity = 1.5f;//240dpi
float factor = dm.density/baseDensity;
Log.e(TAG, "density:"+dm.density);
Log.e(TAG, "dpi:"+dm.densityDpi);
Log.e(TAG, "factor:"+factor);
// 初始化画布
int iconSize = (int) context.getResources().getDimension(android.R.dimen.app_icon_size);
Bitmap numIcon = Bitmap.createBitmap(iconSize, iconSize, Config.ARGB_8888);
Canvas canvas = new Canvas(numIcon);
// 拷贝图片
Paint iconPaint = new Paint();
iconPaint.setDither(true);// 防抖动
iconPaint.setFilterBitmap(true);// 用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
Rect src = new Rect(0, 0, icon.getWidth(), icon.getHeight());
Rect dst = new Rect(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, "the num is not digit :"+ num);
num = "0";
}
int numInt = Integer.valueOf(num);
if(numInt > 99){//超过99
num = "99+";
// 启用抗锯齿和使用设备的文本字体大小
Paint numPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
numPaint.setColor(Color.WHITE);
numPaint.setTextSize(20f*factor);
numPaint.setTypeface(Typeface.DEFAULT_BOLD);
int textWidth=(int)numPaint.measureText(num, 0, num.length());
Log.e(TAG, "text width:"+textWidth);
int circleCenter = (int)