问题描述
我正在创建一个应用程序,并且需要能够在特定目录中创建新文件。但是应用程序无法在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。 )。
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 (将#修改为@)