国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 實現桌面未讀角標

2019-10-23 18:31:57
字體:
來源:轉載
供稿:網友

在小米 三星  索尼 手機 :圖標上顯示數字(未讀消息數):這部分代碼,是從QQ5.0.apk中找的。

小米已經測試通過了,

三星和索尼的,由于沒有相應的手機,沒有測試,有的,可能修改一下代碼(判斷是什么手機的代碼),

測試一下,可以在回復一下測試結果,謝謝

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/204712.html">android/211440.html">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) (15*factor);//中心坐標                int circleRadius = (int) (13*factor);//圓的半徑                //繪制左邊的圓形                Paint leftCirPaint = new Paint(Paint.ANTI_ALIAS_FLAG);                leftCirPaint.setColor(Color.RED);                canvas.drawCircle(iconSize-circleRadius-textWidth+(10*factor), circleCenter, circleRadius, leftCirPaint);                //繪制右邊的圓形                Paint rightCirPaint = new Paint(Paint.ANTI_ALIAS_FLAG);                rightCirPaint.setColor(Color.RED);                canvas.drawCircle(iconSize-circleRadius, circleCenter, circleRadius, rightCirPaint);                //繪制中間的距形                Paint rectPaint = new Paint(Paint.ANTI_ALIAS_FLAG);                rectPaint.setColor(Color.RED);                RectF oval = new RectF(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                // 啟用抗鋸齒和使用設備的文本字體大小                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);                //繪制外面的圓形                //Paint outCirPaint = new Paint(Paint.ANTI_ALIAS_FLAG);                //outCirPaint.setColor(Color.WHITE);                //canvas.drawCircle(iconSize - 15, 15, 15, outCirPaint);                //繪制內部的圓形                Paint inCirPaint = new Paint(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);            }        }        return numIcon;    }    /***     *      * 生成有數字的圖片(沒有邊框)     * @param context     * @param icon 圖片     * @param isShowNum 是否要繪制數字     * @param num 數字字符串:整型數字 超過99,顯示為"99+"     * @return     */    public static Bitmap generatorNumIcon2(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);            /**----------------------------------*             * TODO 繪制圓角矩形背景 start             *------------------------------------*/            //圓角矩形背景的寬度            int backgroundHeight = (int) (2*15*factor);            int backgroundWidth = textWidth>backgroundHeight ? (int)(textWidth+10*factor) : backgroundHeight;            canvas.save();//保存狀態            ShapeDrawable drawable = 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);        }        return numIcon;    }    /***     *      * 生成有數字的圖片(有邊框)     * @param context     * @param icon 圖片     * @param isShowNum 是否要繪制數字     * @param num 數字字符串:整型數字 超過99,顯示為"99+"     * @return     */    public static Bitmap generatorNumIcon3(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);            /**----------------------------------*             * TODO 繪制圓角矩形背景:先畫邊框,再畫內部的圓角矩形 start             *------------------------------------*/            //圓角矩形背景的寬度            int backgroundHeight = (int) (2*15*factor);            int backgroundWidth = textWidth>backgroundHeight ? (int)(textWidth+10*factor) : backgroundHeight;            //邊框的寬度            int strokeThickness = (int) (2*factor);            canvas.save();//保存狀態            int strokeHeight = backgroundHeight + strokeThickness*2;            int strokeWidth = textWidth>strokeHeight ? (int)(textWidth+ 10*factor + 2*strokeThickness) : strokeHeight;            ShapeDrawable outStroke = 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();//保存狀態            ShapeDrawable drawable = 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);        }        return numIcon;    }    /***     *      * 生成有數字的圖片(有邊框的)     * @param context     * @param icon 圖片     * @param isShowNum 是否要繪制數字     * @param num 數字字符串:整型數字 超過99,顯示為"99+"     * @return     */    public static Bitmap generatorNumIcon4(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(25f*factor);            numPaint.setTypeface(Typeface.DEFAULT_BOLD);            int textWidth=(int)numPaint.measureText(num, 0, num.length());            Log.e(TAG, "text width:"+textWidth);            /**----------------------------------*             * TODO 繪制圓角矩形背景 start             *------------------------------------*/            //邊框的寬度            int strokeThickness = (int) (DEFAULT_STROKE_WIDTH_DIP*factor);            //圓角矩形背景的寬度            float radiusPx = 15*factor;            int backgroundHeight = (int) (2*(radiusPx+strokeThickness));//2*(半徑+邊框寬度)            int backgroundWidth = textWidth>backgroundHeight ? (int)(textWidth + 10*factor + 2*strokeThickness) : backgroundHeight;            canvas.save();//保存狀態            ShapeDrawable drawable = 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);        }        return numIcon;    }    /***     * 創建原生系統的快捷方式     * @param context      * @param clazz 啟動的activity     * @param isShowNum 是否顯示數字     * @param num 顯示的數字:整型     * @param isStroke 是否加上邊框     */    public static void installRawShortCut(Context context, Class<?> clazz, boolean isShowNum, String num, boolean isStroke) {        Log.e(TAG, "installShortCut....");        Intent shortcutIntent = new Intent(    "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        Intent mainIntent = new Intent(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);    }    /***     * 是否已經創建了快捷方式     * @param context     * @return     */    public static boolean isAddShortCut(Context context) {         Log.e(TAG, "isAddShortCut....");      boolean isInstallShortcut = false;      final ContentResolver cr = context.getContentResolver();      //TODO 注釋的代碼,在有的手機:修改了ROM的系統,不能支持      /*int versionLevel = android.os.Build.VERSION.SDK_INT;            String AUTHORITY = "com.android.launcher2.settings";            //2.2以上的系統的文件文件名字是不一樣的            if (versionLevel >= 8) {              AUTHORITY = "com.android.launcher2.settings";            } else {              AUTHORITY = "com.android.launcher.settings";            }*/        String AUTHORITY = getAuthorityFromPermission(context, "com.android.launcher.permission.READ_SETTINGS");        Log.e(TAG, "AUTHORITY : " +AUTHORITY);        final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY        + "/favorites?notify=true");        Cursor c = cr.query(CONTENT_URI,            new String[] { "title" }, "title=?",            new String[] { 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);      return isInstallShortcut;    }    /**     * 刪除快捷方式      * @param context     * @param clazz     */     public static void deleteShortCut(Context context, Class<?> clazz){         Log.e(TAG, "delShortcut....");         if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){            //小米            //當為""時,不顯示數字,相當于隱藏了)            xiaoMiShortCut(context, clazz, "");        }else if(Build.MANUFACTURER.equalsIgnoreCase("samsung")){            //三星            samsungShortCut(context, "0");        }else {//其他原生系統手機            //刪除顯示數字的快捷方式            deleteRawShortCut(context, clazz);            //安裝不顯示數字的快捷方式            //installRawShortCut(context, clazz, false, "0");        }     }    /***     * 刪除原生系統的快捷方式     * @param context     * @param clazz 啟動的activity     */    public static void deleteRawShortCut(Context context, Class<?> clazz) {        Intent intent = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");        //快捷方式的名稱        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.app_name));        Intent intent2 = new Intent();         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     * @param context     * @param permission     * @return     */    public static String getAuthorityFromPermission(Context context, String permission) {        if (TextUtils.isEmpty(permission)) {            return null;        }        List<PackageInfo> packInfos = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);        if (packInfos == null) {            return null;        }        for (PackageInfo info : packInfos) {            ProviderInfo[] providers = info.providers;            if (providers != null) {                for (ProviderInfo provider : providers) {                    if (permission.equals(provider.readPermission)                            || permission.equals(provider.writePermission)) {                        return provider.authority;                    }                }            }        }        return null;    }    /***     * 在小米應用圖標的快捷方式上加數字<br>     *      *      * @param context     * @param num 顯示的數字:大于99,為"99",當為""時,不顯示數字,相當于隱藏了)<br><br>     *      * 注意點:     * context.getPackageName()+"/."+clazz.getSimpleName() (這個是啟動activity的路徑)中的"/."不能缺少     *      */    public static void xiaoMiShortCut(Context context,Class<?> clazz, String num)     {        Log.e(TAG, "xiaoMiShortCut....");        Intent localIntent = new Intent("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{          int numInt = 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);     }                                                 /***     * 索尼手機:應用圖標的快捷方式上加數字     * @param context     * @param num     */    public static void sonyShortCut(Context context, String num)     {      String activityName = getLaunchActivityName(context);      if (activityName == null){       return;      }      Intent localIntent = new Intent();      int numInt = Integer.valueOf(num);      boolean isShow = true;      if (numInt < 1){       num = "";       isShow = false;      }else if (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);     }     /***     * 三星手機:應用圖標的快捷方式上加數字     * @param context     * @param num     */    public static void samsungShortCut(Context context, String num)     {        int numInt = Integer.valueOf(num);      if (numInt < 1)      {       num = "0";      }else if (numInt > 99){          num = "99";      }         String activityName = getLaunchActivityName(context);      Intent localIntent = new Intent("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);     }     /***     * 在應用圖標的快捷方式上加數字     * @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);      }     }     /***     * 取得當前應用的啟動activity的名稱:     * mainfest.xml中配置的 android:name:"     * @param context     * @return     */    public static String getLaunchActivityName(Context context)     {      PackageManager localPackageManager = context.getPackageManager();      Intent localIntent = new Intent("android.intent.action.MAIN");      localIntent.addCategory("android.intent.category.LAUNCHER");      try      {       Iterator<ResolveInfo> localIterator = localPackageManager.queryIntentActivities(localIntent, 0).iterator();       while (localIterator.hasNext())       {        ResolveInfo localResolveInfo = localIterator.next();        if (!localResolveInfo.activityInfo.applicationInfo.packageName.equalsIgnoreCase(context.getPackageName()))         continue;        String str = localResolveInfo.activityInfo.name;        return str;       }      }      catch (Exception localException)      {       return null;      }      return null;     }    /***     * 得到一個默認的背景:圓角矩形<br><br>     * 使用代碼來生成一個背景:相當于用<shape>的xml的背景     *      * @return     */    private static ShapeDrawable getDefaultBackground(Context context) {        //這個是為了應對不同分辨率的手機,屏幕兼容性        int r = dipToPixels(context,DEFAULT_CORNER_RADIUS_DIP);        float[] outerR = new float[] {r, r, r, r, r, r, r, r};        //圓角矩形        RoundRectShape rr = new RoundRectShape(outerR, null, null);        ShapeDrawable drawable = new ShapeDrawable(rr);        drawable.getPaint().setColor(DEFAULT_NUM_COLOR);//設置顏色        return drawable;    }    /***     * 得到一個默認的背景:圓角矩形<br><br>     * 使用代碼來生成一個背景:相當于用<shape>的xml的背景     *      * @return     */    private static ShapeDrawable getDefaultBackground2(Context context) {        //這個是為了應對不同分辨率的手機,屏幕兼容性        int r = dipToPixels(context,DEFAULT_CORNER_RADIUS_DIP);        float[] outerR = new float[] {r, r, r, r, r, r, r, r};        int distance = dipToPixels(context,DEFAULT_STROKE_WIDTH_DIP);        //圓角矩形        RoundRectShape rr = new RoundRectShape(outerR, null, null);        customBorderDrawable drawable = new customBorderDrawable(context,rr);        drawable.getFillpaint().setColor(DEFAULT_NUM_COLOR);//設置填充顏色        drawable.getStrokepaint().setColor(DEFAULT_STROKE_COLOR);//設置邊框顏色        drawable.getStrokepaint().setStrokeWidth(distance);//設置邊框寬度        return drawable;    }    /***     * 得到一個默認的背景:圓角矩形<br><br>     * 使用代碼來生成一個背景:相當于用<shape>的xml的背景     *      * @return     */    private static ShapeDrawable getDefaultStrokeDrawable(Context context) {        //這個是為了應對不同分辨率的手機,屏幕兼容性        int r = dipToPixels(context, DEFAULT_CORNER_RADIUS_DIP);        int distance = dipToPixels(context, DEFAULT_STROKE_WIDTH_DIP);        float[] outerR = new float[] {r, r, r, r, r, r, r, r};        //圓角矩形        RoundRectShape rr = new RoundRectShape(outerR, null, null);        ShapeDrawable drawable = new ShapeDrawable(rr);        drawable.getPaint().setStrokeWidth(distance);        drawable.getPaint().setStyle(Paint.Style.FILL);        drawable.getPaint().setColor(DEFAULT_STROKE_COLOR);//設置顏色        return drawable;    }    /***     * dp to px     * @param dip     * @return     */    public static int dipToPixels(Context context, int dip) {        Resources r = context.getResources();        float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics());        return (int) px;    }}

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐山县| 鹤庆县| 四会市| 万全县| 祥云县| 清徐县| 泊头市| 深州市| 东辽县| 上思县| 凭祥市| 平南县| 宁波市| 双辽市| 湾仔区| 志丹县| 宁阳县| 东丽区| 邯郸县| 九龙坡区| 贡山| 会昌县| 铜川市| 太仓市| 菏泽市| 沐川县| 拉孜县| 武山县| 清新县| 盐池县| 措勤县| 海阳市| 石狮市| 巴彦县| 图片| 长宁县| 商洛市| 大安市| 西峡县| 云阳县| 郑州市|