使用Android SDK 21将新文件写入可移动存储中的其他应用程序数据目录时出错

问题描述

我正在创建一个应用程序,并且需要能够在特定目录中创建新文件。但是应用程序无法在Android上 SD卡 /可移动磁盘上存储的另一个目录中创建新文件。我编写了以下函数

private static String getExternalStoragePath(Context mContext) {
    StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
    Class<?> storageVolumeClazz = null;
    try {
        storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
        Method getVolumeList = mStorageManager.getClass().getmethod("getVolumeList");
        Method getPath = storageVolumeClazz.getmethod("getPath");
        Method isRemovable = storageVolumeClazz.getmethod("isRemovable");
        Object result = getVolumeList.invoke(mStorageManager);
        final int length = Array.getLength(result);
        for (int i = 0; i < length; i++) {
            Object storageVolumeElement = Array.get(result,i);
            String path = (String) getPath.invoke(storageVolumeElement);
            boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
            if (removable == true) {
                return path;
            }
        }
    } catch (ClassNotFoundException e) {
        e.printstacktrace();
    } catch (InvocationTargetException e) {
        e.printstacktrace();
    } catch (NoSuchMethodException e) {
        e.printstacktrace();
    } catch (illegalaccessexception e) {
        e.printstacktrace();
    }
    return null;
}

和以下代码来处理文件创建过程,

...
String dirOtherApp = "/Android/data/com.other.application/";
String sdCardpath = getExternalStoragePath(context);
String fileName = "new_file.txt";
final File removableStorage = new File(sdCardpath + dirOtherApp + "/" + fileName);
...

但是这样的日志出现错误

Caused by: java.io.FileNotFoundException: /storage/4454-1BFB/Android/data/Android/data/com.other.application/new_file.txt (Permission denied)

我在设备上的目录“ sdcard0”中创建文件没有问题,但是在目录“ scard1” /可移动存储中创建新文件时,它总是会失败(如果我的卡ID为4454-1BFB。 )。

我用 KOTLIN 这样的代码编写了请求权限代码

private val readStoragePermission: Int = 11
@RequiresApi(Build.VERSION_CODES.M)
private fun requestPhonePermissions() {
    if (ContextCompat.checkSelfPermission(
            this,Manifest.permission.WRITE_EXTERNAL_STORAGE
        )
        != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(
            this,arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),readStoragePermission
        )
    }
    if (ContextCompat.checkSelfPermission(
            this,Manifest.permission.READ_EXTERNAL_STORAGE
        )
        != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(
            this,arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),Manifest.permission.ACCESS_NOTIFICATION_POLICY
        )
        != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(
            this,arrayOf(Manifest.permission.ACCESS_NOTIFICATION_POLICY),readStoragePermission
        )
    }
}

如何在可移动存储中创建新文件?我也必须向功能请求权限中添加代码吗?,非常感谢您的回答。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)