Android 应用程序图标 文件管理器

标签 android file icons drawable

我想在文件管理器中添加一个选项来显示目录的应用程序图标。下面的代码不起作用;我做错了什么?

ImageView icon;
private static Activity activity;
String temp = mFileMang.getCurrentDir();

} else if (sub_ext.equalsIgnoreCase("apk")) {
                final Drawable appicon;
                try {
                    PackageInfo packageInfo = activity.getPackageManager()
                            .getPackageArchiveInfo(temp,
                                    PackageManager.GET_ACTIVITIES);
                    ApplicationInfo appInfo = packageInfo.applicationInfo;

                    appInfo.sourceDir = temp;
                    appInfo.publicSourceDir = temp;

                    appicon = appInfo
                            .loadIcon(activity.getPackageManager());
                    mViewHolder.icon.setImageDrawable(appicon);

                } catch (Exception e) {
                    mViewHolder.icon.setImageResource(R.drawable.appicon);
                }

最佳答案

试试这个..我从SD卡目录中获取图标..从未安装的apk文件中获取图标...

    public class A extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.app_listing);
        ListView list = (ListView) findViewById(R.id.app_listing);
        ArrayList<PackageInfoStruct> listData = getApks();
        list.setAdapter(new TestAdapter(listData, A.this));

    }

    class PackageInfoStruct {
        String appname = "";
        String pname = "";
        String versionName = "";
        int versionCode = 0;
        Drawable icon;
        String datadir = "";
    }

    public ArrayList<PackageInfoStruct> res;

    private ArrayList<PackageInfoStruct> getApks() {
        try {
            String path = Environment.getExternalStorageDirectory() + "/test";
            File file = new File(path);
            String[] list = file.list();
            res = new ArrayList<PackageInfoStruct>();
            for (String str : list) {
                String not_installed_apk_file = path + "/" + str;
                PackageManager pm = getPackageManager();
                PackageInfo pi = pm.getPackageArchiveInfo(
                        not_installed_apk_file, 0);
                if (pi == null)
                    continue;
                // the secret are these two lines....
                pi.applicationInfo.sourceDir = not_installed_apk_file;
                pi.applicationInfo.publicSourceDir = not_installed_apk_file;
                //
                Drawable APKicon = pi.applicationInfo.loadIcon(pm);
                String AppName = (String) pi.applicationInfo.loadLabel(pm);
                PackageInfoStruct pack = new PackageInfoStruct();
                pack.icon = APKicon;
                pack.pname = AppName;
                res.add(pack);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    private ArrayList<PackageInfoStruct> getInstalledApps() {
        try {
            res = new ArrayList<PackageInfoStruct>();
            List<PackageInfo> packs = getPackageManager().getInstalledPackages(
                    0);

            for (int i = 0; i < packs.size(); i++) {
                PackageInfo p = packs.get(i);

                PackageInfoStruct newInfo = new PackageInfoStruct();
                newInfo.appname = p.applicationInfo.loadLabel(
                        getPackageManager()).toString();
                newInfo.pname = p.packageName;
                newInfo.datadir = p.applicationInfo.dataDir;
                newInfo.versionName = p.versionName;
                newInfo.versionCode = p.versionCode;
                newInfo.icon = p.applicationInfo.loadIcon(this
                        .getPackageManager());
                res.add(newInfo);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

}

关于Android 应用程序图标 文件管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919151/

相关文章:

java - Android fragment 和 findFragmentByTag()

Android - 布局上的 dp 单位 - 看起来是个坏主意?

c - 如何在 ANSI C 中正确锁定文件

java - 根据光标悬停在哪个按钮上更改 JLabel 中的图像?

Android - 生命周期和保存实例状态问题

android - 找不到使用 action.DIAL 处理 Intent 的 Activity

Java/Android : Byte to file not saving?

java - Bufferedreader 无法读取整个文件

c# - 图标透明度问题

java - 为什么未选择的 JButton 显示突出显示的图标?