zoukankan      html  css  js  c++  java
  • Android——获取手机应用图标

    需求:

    将手机中的所有应用图标,以应用名称命名,后缀为jpg,存放在SD卡中

    思路:

    1.通过getPackageManager().getInstalledPackages(0)获取已安装的包的信息PackageInfo

    2.通过包信息PackageInfo获取包名、版本名、版本号、当然还有应用图标Drawable对象

    3.将Drawable对象转换成Bitmap对象再存储即可(。。。目前只能这样了,暂时不知道如何对Drawable进行处理)

    代码:

     1 package com.example.utils;
     2 
     3 import java.io.File;
     4 import java.io.FileOutputStream;
     5 import java.util.List;
     6 
     7 import android.app.Activity;
     8 import android.content.pm.PackageInfo;
     9 import android.graphics.Bitmap;
    10 import android.graphics.Canvas;
    11 import android.graphics.PixelFormat;
    12 import android.graphics.drawable.Drawable;
    13 import android.os.Bundle;
    14 
    15 public class MainActivity extends Activity {
    16 
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.activity_main);
    21 
    22         // 获取PackageInfo
    23         List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
    24 
    25         // 获取需要的信息并存储(当然这里可以用增强for循环)
    26         for (int i = 0; i < packages.size(); i++) {
    27             PackageInfo packageInfo = packages.get(i);
    28             String appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
    29             Drawable appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());
    30 
    31             // 将drawable转成Bitmap对象
    32             Bitmap bm = drawableToBitmap(appIcon);
    33 
    34             // 指定存储路径以及存储文件名格式
    35             File dir = new File("/sdcard/Pictures/");
    36             File outputImg = new File(dir, appName + ".jpg");
    37             
    38             // Bitmap存储过程
    39             try {
    40                 FileOutputStream out = new FileOutputStream(outputImg);
    41                 bm.compress(Bitmap.CompressFormat.PNG, 90, out);
    42                 out.flush();
    43                 out.close();
    44                 LogUtil.e("test", "已经保存" + i);
    45             } catch (Exception e) {
    46                 // 不处理异常了
    47             }
    48 
    49         }
    50     }
    51 
    52     /**
    53      * 将Drawable转成Bitmap
    54      * @param drawable
    55      * @return
    56      */
    57     public Bitmap drawableToBitmap(Drawable drawable) {
    58 
    59         Bitmap bitmap = Bitmap.createBitmap(
    60 
    61         drawable.getIntrinsicWidth(),
    62 
    63         drawable.getIntrinsicHeight(),
    64 
    65         drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
    66 
    67         : Bitmap.Config.RGB_565);
    68 
    69         Canvas canvas = new Canvas(bitmap);
    70 
    71         // canvas.setBitmap(bitmap);
    72 
    73         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
    74                 drawable.getIntrinsicHeight());
    75 
    76         drawable.draw(canvas);
    77 
    78         return bitmap;
    79 
    80     }
    81 }

    为了方便,将之封装成一个Util

     1 import java.io.File;
     2 import java.io.FileOutputStream;
     3 import java.util.List;
     4 
     5 import android.content.Context;
     6 import android.content.pm.PackageInfo;
     7 import android.graphics.Bitmap;
     8 import android.graphics.Canvas;
     9 import android.graphics.PixelFormat;
    10 import android.graphics.drawable.Drawable;
    11 
    12 public class IconUtil {
    13     private IconUtil() {
    14         // 不允许实例化这个对象
    15         throw new UnsupportedOperationException("cannot be instantiated");
    16     }
    17 
    18     /**
    19      * 将手机上所有的图标存放到saveDir目录下.<br/>
    20      * 使用时需要在Manifest中声明两个权限:<br/>
    21      * android.permission.WRITE_EXTERNAL_STORAGE.<br/>
    22      * 
    23      * android.permission.MOUNT_UNMOUNT_FILESYSTEMS.<br/>
    24      * @param context
    25      * @param saveDir 存放的手机文件夹目录,如new File("/sdcard/Pictures/");
    26      * @return i表示图标数量,i=0表示未获取到图标
    27      */
    28     public static int saveIcon(Context context, File saveDir) {
    29         // 获取PackageInfo
    30         List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0);
    31         int i = 0;
    32         int size = packages.size();
    33         for (i = 0; i < size; i++) {
    34             // 从PackageInfo中获取应用名称和应用图标(Drawable)
    35             PackageInfo packageInfo = packages.get(i);
    36             String appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
    37             Drawable appIcon = packageInfo.applicationInfo.loadIcon(context.getPackageManager());
    38 
    39             // 将drawable转成Bitmap对象
    40             Bitmap bm = drawableToBitmap(appIcon);
    41 
    42             // 指定存储路径以及存储文件名格式
    43             File outputImg = new File(saveDir, appName + ".png");
    44             
    45             // Bitmap存储过程
    46             try {
    47                 FileOutputStream out = new FileOutputStream(outputImg);
    48                 bm.compress(Bitmap.CompressFormat.PNG, 90, out);
    49                 out.flush();
    50                 out.close();
    51             } catch (Exception e) {
    52                 // 暂不处理异常
    53             }
    54             
    55         }
    56         return i;
    57     }
    58     
    59     /**
    60      * 将Drawable转换成Bitmap
    61      * @param drawable
    62      * @return
    63      */
    64     public static Bitmap drawableToBitmap(Drawable drawable) {
    65 
    66         Bitmap bitmap = Bitmap.createBitmap(
    67 
    68         drawable.getIntrinsicWidth(),
    69 
    70         drawable.getIntrinsicHeight(),
    71 
    72         drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
    73 
    74         : Bitmap.Config.RGB_565);
    75 
    76         Canvas canvas = new Canvas(bitmap);
    77 
    78         // canvas.setBitmap(bitmap);
    79 
    80         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
    81                 drawable.getIntrinsicHeight());
    82 
    83         drawable.draw(canvas);
    84 
    85         return bitmap;
    86 
    87     }
    88 }

    使用举例:MainActivity

    注意:Manifest权限声明

    注意需要声明权限

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
     1 import java.io.File;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.os.Environment;
     6 import android.widget.TextView;
     7 
     8 public class MainActivity extends Activity {
     9 
    10     private File iconDir;
    11     private TextView textView;
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         setContentView(R.layout.activity_main);
    16         textView = (TextView) findViewById(R.id.text);
    17         textView.setText("正在获取...");
    18 
    19     }
    20     @Override
    21     protected void onResume() {
    22         // TODO Auto-generated method stub
    23         super.onResume();
    24         // 指定存储路径
    25         String path = Environment.getExternalStorageDirectory().toString() + "/Icons";
    26         iconDir = new File(path);
    27         if (!iconDir.exists()) {
    28             boolean sucess = iconDir.mkdirs();
    29             if(sucess){
    30                 
    31                 int i = IconUtil.saveIcon(this, iconDir);
    32                 textView.setText("总共获取了  "+i+"  个图标!");
    33             }else{
    34                 textView.setText("创建文件夹失败!");
    35             }
    36             
    37         }else {
    38             
    39             int i = IconUtil.saveIcon(this, iconDir);
    40             textView.setText("总共获取了  "+i+"  个图标!");
    41             
    42         }
    43     }
    44 
    45     
    46 }

    参考:http://www.cnblogs.com/mainroadlee/archive/2011/05/23/android_get_installed_app.html

  • 相关阅读:
    Unity3D系列教程--使用免费工具在Unity3D中开发2D游戏 第一节
    第十三周项目2:形状类族中的纯虚函数
    js中的null和undefined
    javaScript Windows相关
    Array和ArrayList的异同点
    汉语-词语-人才:T型人才
    图书-计算机-软件编程:《程序员的自我需要》
    智力-智力测试-门萨:百科
    智力开发-早教:七田真
    经济-AMA:百科
  • 原文地址:https://www.cnblogs.com/erhai/p/5010774.html
Copyright © 2011-2022 走看看