当前位置: 移动技术网 > IT编程>移动开发>Android > Android 实现桌面未读角标

Android 实现桌面未读角标

2019年07月24日  | 移动技术网IT编程  | 我要评论

雅特士外包网,斗罗大陆之千翼紫幽,又名三明站长网

在小米 三星  索尼 手机 :图标上显示数字(未读消息数):这部分代码,是从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.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;
    }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持移动技术网!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网