前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >039android初级篇之获取已安装应用的图标签名等信息并保存

039android初级篇之获取已安装应用的图标签名等信息并保存

作者头像
上善若水.夏
发布2018-09-28 10:47:27
1.1K0
发布2018-09-28 10:47:27
举报
文章被收录于专栏:上善若水上善若水

对于已安装的应用我们可以使用PackageManager获取其图标 程序版本 版本名称 应用名 程序的权限 程序的签名等等。

获取安装已安装应用信息

直接上代码:

代码语言:javascript
复制
public class Info {
    Context context;
    PackageManager pm;

    public Info(Context context) {
        this.context = context;
        pm = context.getPackageManager();
    }

    /*
     * 获取程序 图标
     */
    public Drawable getAppIcon(String packname) {
        try {
            ApplicationInfo info = pm.getApplicationInfo(packname, 0);

            return info.loadIcon(pm);
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
        return null;
    }

    /*
     *获取程序的版本号
     */
    public String getAppVersion(String packname) {

        try {
            PackageInfo packinfo = pm.getPackageInfo(packname, 0);
            return packinfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();

        }
        return null;
    }


    /*
     * 获取程序的名字
     */
    public String getAppName(String packname) {
        try {
            ApplicationInfo info = pm.getApplicationInfo(packname, 0);
            return info.loadLabel(pm).toString();
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
        return null;
    }

    /*
     * 获取程序的权限
     */
    public String[] getAppPremission(String packname) {
        try {
            PackageInfo packinfo = pm.getPackageInfo(packname, PackageManager.GET_PERMISSIONS);
            //获取到所有的权限
            return packinfo.requestedPermissions;

        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();

        }
        return null;
    }


    /*
     * 获取程序的签名
     */
    public String getAppSignature(String packname) {
        try {
            PackageInfo packinfo = pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
            //获取到所有的权限
            return packinfo.signatures[0].toCharsString();

        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();

        }
        return null;
    }
}

保存获取的图标

代码语言:javascript
复制
void getIconByPackagename(Context mContext)
{
    String packagename = mEditText.getText().toString();
    Info info = new Info(getApplicationContext());
    String version = "appname:  "+info.getAppName(packagename)+"\n"
            +"version:  "+info.getAppVersion(packagename)+"\n";
    Log.e(TAG,"packagename:"+packagename + version);
    Drawable d = info.getAppIcon(packagename);
    if(d == null){
        Log.e(TAG,"Error: getAppIcon "+packagename);
        return ;
    }

    Bitmap bitmap = drawableToBitmap(d);
    Bitmap bitmapCuted = cutFromBitmap(bitmap);
   // saveBitmap(bitmapCuted,packagename+".png");
    mTextView.setText(version);
   imageView.setBackground(d);
    //imageView.setBackground(new BitmapDrawable(bitmapCuted));
    Toast.makeText(mContext,  packagename+" " +getBitmapsize2(bitmapCuted), Toast.LENGTH_SHORT).show();
}

Drawable与Bitmap的对比

Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。

Drawable - 作为Android平台下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。

Drawable在内存占用和绘制速度这两个非常关键的点上胜过Bitmap

Drawable与Bitmap之间的转换

代码语言:javascript
复制
public static Bitmap drawableToBitmap(Drawable drawable) {

    Bitmap bitmap = Bitmap.createBitmap(

            drawable.getIntrinsicWidth(),

            drawable.getIntrinsicHeight(),

            drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888

                    : Bitmap.Config.RGB_565);

    Canvas canvas = new Canvas(bitmap);

    //canvas.setBitmap(bitmap);

    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

    drawable.draw(canvas);

    return bitmap;

}

图片的剪切

代码语言:javascript
复制
private static  final int ICON_LEN_LDPI120   =36;
private static  final int ICON_LEN_MDPI160   =48;
private static  final int ICON_LEN_HDPI240   =72;
private static  final int ICON_LEN_XHDPI320   =96;
private static  final int ICON_LEN_XXHDPI480   =144;
//需要切割的图片资源、切割起始点的X坐标、切割起始点的Y坐标、切割多宽、切割多高
public  Bitmap cutFromBitmap(Bitmap bitmap) {
    int starx=(90-72)/2;
    int stary=starx;
    int len;
    int oLen=bitmap.getWidth();

    switch (densityDpi) {
        case ICON_LEN_LDPI120: len =ICON_LEN_LDPI120; break;
        case ICON_LEN_MDPI160: len =ICON_LEN_MDPI160; break;
        case ICON_LEN_HDPI240: len =ICON_LEN_HDPI240; break;
        case ICON_LEN_XHDPI320: len =ICON_LEN_XHDPI320; break;
        case ICON_LEN_XXHDPI480: len =ICON_LEN_XXHDPI480; break;
        default: return bitmap;
    }

    if(oLen < len){
        Log.e(TAG,"ERROR:oLen < len");
        return bitmap;
    }
    Bitmap mm = Bitmap.createBitmap(bitmap,(oLen-len)/2,(oLen-len)/2,len,len);
    return mm;
}

图片的保存

代码语言:javascript
复制
  public void saveBitmap(Bitmap bm,String picName ) {
    Log.e(TAG, "保存图片");
    File f = new File("/sdcard/", picName);
    if (f.exists()) {
        f.delete();
    }
    try {
        FileOutputStream out = new FileOutputStream(f);
        bm.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.flush();
        out.close();
        Log.i(TAG, "已经保存");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

参考链接

  1. Android中 Bitmap和Drawable相互转换的方法
  2. Android 一个apk多个ICON执行入口
  3. Android,App 常用图标尺寸规范
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.03.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取安装已安装应用信息
  • 保存获取的图标
    • Drawable与Bitmap的对比
      • Drawable与Bitmap之间的转换
        • 图片的剪切
          • 图片的保存
          • 参考链接
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档