小工具知识网

当前位置: 首页 > 行业知识 > Android 11 访问 Android/data/或者getExternalCacheDir() 非root方式

行业知识

Android 11 访问 Android/data/或者getExternalCacheDir() 非root方式

2026-10-30 02:51:17 来源:互联网转载

前言:

需���要求安装三方应用ExternalCacheDir()下载下来的apk文件。

getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/

获取访问权限

如果手机安卓版本为Android10的时候,可以在AndroidManifest.xml中添加下列代码

   android:requestLegacyExternalStorage="true"

以此禁用分区存储,但这在Android11及以上版本不起作用。

  • 非root方式 (root方式点这里)

    使用 Storage Access Framework 请求访问权限。

    SAF 提供了一种标准化的方式来让应用程序请求访问其他应用的文件和目录。要使用 SAF 请求访问 Android/data 目录。

    private static int REQUEST_CODE_FOR_DIR = 10525;    //通过SAF获取权限 public  void startForSAF(Activity activity) {        Uri uri = Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata");        DocumentFile documentFile = DocumentFile.fromTreeUri(activity, uri);        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION                | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION                | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);        assert documentFile != null;        intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, documentFile.getUri());        activity.startActivityForResult(intent, REQUEST_CODE_FOR_DIR);    }    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        Uri uri;        if (requestCode == REQUEST_CODE_FOR_DIR && (uri = data.getData()) != null) {            getContentResolver().takePersistableUriPermission(uri, data.getFlags() & (                    Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION));            finish();        }    }
        //使用时    public static Uri pathToUri(String path) {        return Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3A" +path.replace("/storage/emulated/0/", "").replace("/", "%2F"));    }

    效果如下:

上一篇:网站有服务器怎么备案?

下一篇:主机内部结构实验报告单怎么填