文件选择器DocumentUI显示apk文件图标

2023-05-16

1.定位代码与调试

Hierarchy Viewer分析界面工具,uiautomatorviewer自动化查看器,定位组件。添加调试信息,调试定位代码

2.搜索获取apk文件图标

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

public static Drawable getApkIcon(Context context, String apkPath) {
        PackageManager pm = context.getPackageManager();
        PackageInfo info = pm.getPackageArchiveInfo(apkPath,
                PackageManager.GET_ACTIVITIES);
        if (info != null) {
            ApplicationInfo appInfo = info.applicationInfo;
            appInfo.sourceDir = apkPath;
            appInfo.publicSourceDir = apkPath;
            try {
                return appInfo.loadIcon(pm);
            } catch (OutOfMemoryError e) {
                Log.e("ApkIconLoader", e.toString());
            }
        }
        return null;
    }

3.新建app验证方案

提示错误:

(1)查看开源代码AnExplorer,采用该方案与上述不同。调试发现info为空。

(2)pm.getPackageArchiveInfo没有获取到PackageInfo对象,可能是路径错误。查看方法,打印路径。

(3)api错误,修改api源码添加log日志,发现google极客文件使用该api。

(4)权限问题,添加storage权限,并且开启storage授权。

4.添加权限

PackageInfo mPkgInfo = pm.getPackageInfo(packageUri,
        PackageManager.GET_PERMISSIONS
                | PackageManager.MATCH_UNINSTALLED_PACKAGES);
if(mPkgInfo != null){
    return pm.getApplicationIcon(mPkgInfo.applicationInfo);
}else {android.util.Log.e("zmc","packageInfo is null");}

 android 默认apk添加权限

frameworks\base\services\core\java\com\android\server\pm\DefaultPermissionGrantPolicy.java

   private static final Set<String> STORAGE_PERMISSIONS = new ArraySet<>();

    static {

        STORAGE_PERMISSIONS.add(Manifest.permission.READ_EXTERNAL_STORAGE);

        STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);

       STORAGE_PERMISSIONS.add(Manifest.permission.ACCESS_MEDIA_LOCATION);

    }


grantDefaultSystemHandlerPermissions(int userId){
//默认apk权限添加 -> grantRuntimePermissionsLPw

grantPermissionsToSystemPackage("com.android.documentsui",userId,STORAGE_PERMISSIONS);

在代码中添加权限,会造成gms-gts不过,alps/frameworks/base/data/etc/com.android.documentsui.xml下添加权限

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件选择器DocumentUI显示apk文件图标 的相关文章

随机推荐