Android 如何在不授予“存储”权限的情况下访问共享文件
使用Nexus 5、os M 6.0.1和照相/摄像机应用程序,选择一张照片并进行“共享”。在目标应用程序中,它从intent和文件路径获取Uri。 当新建FileInputStreamnew FilepathToFile时抛出: 打开失败:EACCES权限被拒绝 这是因为未授予“存储”权限,但不希望要求用户专门授予“存储”权限。 是否有其他方法可以在没有“存储”权限的情况下读取文件 以下是提取文件路径的方式:Android 如何在不授予“存储”权限的情况下访问共享文件,android,permissions,share,Android,Permissions,Share,使用Nexus 5、os M 6.0.1和照相/摄像机应用程序,选择一张照片并进行“共享”。在目标应用程序中,它从intent和文件路径获取Uri。 当新建FileInputStreamnew FilepathToFile时抛出: 打开失败:EACCES权限被拒绝 这是因为未授予“存储”权限,但不希望要求用户专门授予“存储”权限。 是否有其他方法可以在没有“存储”权限的情况下读取文件 以下是提取文件路径的方式: if (Intent.ACTION_SEND.equals(action) &
if (Intent.ACTION_SEND.equals(action) &&
intent.hasExtra(Intent.EXTRA_STREAM)) {
Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
String filePath;
Cursor cursor = null;
final String column = "_data";
final String[] projection = { column };
try {
cursor = context.getContentResolver().query(uri, projection, null, null,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
filePath = cursor.getString(column_index);
}
} catch(Exception e){
return getFilePathFromInputStream(context, uri);
}
finally {
if (cursor != null)
cursor.close();
}
// upto here got filePath =
/storage/emulated/0/DCIM/Camera/IMG_20170326_184502.jpg
boolean b = false;
try{
File f2 = new File(filePath);
b = f2.exists();
} catch(Exception e) {
Log.e("+++ exception e:"+e.getMessage());
} catch(Error e) {
Log.e("+++ error e:"+e.getMessage());
}
// unto here no exception, then
fileInputStream = new FileInputStream(new File(filePath)); //<=== here throws
java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/IMG_20170326_184502.jpg: open failed: EACCES (Permission denied)
如果您想在没有“存储”权限的情况下读取文件。您需要关闭targetSdkVersion。您可以编辑build.gradle文件容器applicationId,在标记defaultConfig上使用targetSdkVersion 22。如果您想在没有“存储”权限的情况下读取文件。您需要关闭targetSdkVersion。您可以编辑build.gradle文件容器applicationId,在标记defaultConfig上使用targetSdkVersion 22。不要从该uri提取文件路径 只需将uri传递给下一个应用程序 永远不要尝试从URI提取文件路径。而是直接打开uri的输入流。不是文件输入流 将uri传递到下一个应用程序将遇到足够多的问题 传递uri很容易,但下一个应用程序将无法读取,因为您无法传输获得的权限
您可以改为使用内容提供商为所选文件提供服务。不要从该uri提取文件路径 只需将uri传递给下一个应用程序 永远不要尝试从URI提取文件路径。而是直接打开uri的输入流。不是文件输入流 将uri传递到下一个应用程序将遇到足够多的问题 传递uri很容易,但下一个应用程序将无法读取,因为您无法传输获得的权限
您可以使用内容提供商为所选文件提供服务。您收到的实际uri是多少?您收到的实际uri是多少?谢谢您的建议。将尝试从不尝试从URI提取文件路径。而是直接打开uri的输入流。。顺便说一句,我没有创建uri来传递给下一个应用程序,这是从“相机”应用程序的库中进行共享,我的应用程序是“下一个”应用程序。谢谢你的建议。将尝试从不尝试从URI提取文件路径。而是直接打开uri的输入流。。顺便说一句,我没有创建uri来传递给下一个应用程序,它是从“相机”应用程序的库中进行共享,我的应用程序是“下一个”应用程序。