android 外置TF卡/Android/data/ 读写问题

2022-08-18  本文已影响0人  gale_小米
com.android.providers.media.module  MediaProvider: Can't create a file in another app's external directory

在这里坐下处理

A100_R11.0_MID\packages\providers\MediaProvider\src\com\android\providers\media\MediaProvider.java
把这个限制过滤掉

    /**
     * Returns {@code true} if {@link #mCallingIdentity#getSharedPackages(String)} contains the
     * given package name, {@code false} otherwise.
     * <p> Assumes that {@code mCallingIdentity} has been properly set to reflect the calling
     * package.
     */
    private boolean isCallingIdentitySharedPackageName(@NonNull String packageName) {
        for (String sharedPkgName : mCallingIdentity.get().getSharedPackageNames()) {
            Log.e(TAG, " sharedPkgName.equals="+(packageName.toLowerCase(Locale.ROOT)
                    .equals(sharedPkgName.toLowerCase(Locale.ROOT))));
            Log.e(TAG, " sharedPkgName.contains="+(packageName.toLowerCase(Locale.ROOT).contains("xxx")));
            if (packageName.toLowerCase(Locale.ROOT)
                    .equals(sharedPkgName.toLowerCase(Locale.ROOT))
                    || packageName.toLowerCase(Locale.ROOT).contains("xxx")) {
                return true;
            }
        }
        return false;
    }

2.就是在TF卡的某些目录下不能创建文件夹和读写文件

No SD card Present. Not able to read and write. Found path

可以在 Index: frameworks/base/core/java/android/app/ActivityThread.java 给某些目录提升权限

private static class AndroidOs extends ForwardingOs {
...
        @Override
        public boolean access(String path, int mode) throws ErrnoException {
            if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) {
                // If we opened it okay, then access check succeeded
                IoUtils.closeQuietly(
                        openDeprecatedDataPath(path, FileUtils.translateModeAccessToPosix(mode)));
                return true;
             } else {
+                if(!path.startsWith("/storage/emulated") && path.contains("/Android/data/xxx")){
+                    mode=0;
+                }
+                Log.v(TAG, "access path=" + path + " mode " + mode);
                 return super.access(path, mode);
             }
...
}
上一篇 下一篇

猜你喜欢

热点阅读