Java Android 10-文件提供程序-权限拒绝:读取Android.support.v4.content.FileProvider uri
我试图生成一个CSV文件(加速度计),将其保存到我的Java Android 10-文件提供程序-权限拒绝:读取Android.support.v4.content.FileProvider uri,java,android,android-fileprovider,Java,Android,Android Fileprovider,我试图生成一个CSV文件(加速度计),将其保存到我的上下文.getFilesDir(),然后使用FileProvider将其共享到Google Drive 问题是当我尝试共享它时,错误将异常写入包,java.lang.SecurityException:权限拒绝:读取android.support.v4.content.FileProvider uricontent://...csv 要求导出提供程序,否则grantUriPermission()将继续发生 我有 按照其他人的建议,添加了gran
上下文.getFilesDir()
,然后使用FileProvider将其共享到Google Drive
问题是当我尝试共享它时,错误将异常写入包,java.lang.SecurityException:权限拒绝:读取android.support.v4.content.FileProvider uricontent://...csv 要求导出提供程序,否则grantUriPermission()将继续发生
我有
按照其他人的建议,添加了grantUriPermission()
和Intent.addFlags(Intent.FLAG\u GRANT\u READ\u URI\u PERMISSION)
我试图写入环境。getExternalStorageDirectory()
,但由于我的手机没有外部存储器,因此无法工作
我无法导出提供程序,因为它也会引发错误
那我该怎么办?或者这是生成和共享CSV文件的更好方法?如有任何建议,将不胜感激。谢谢大家
现在的代码片段
在AndroidManifest.xml中:
...
在provider_path.xml中
在mainActivity.java中
private void onShareCSV(){
uripath=FileProvider.getUriForFile(这是“com.example.FileProvider”,新文件(filePath+fileName));
Log.d(标记“onShareCSV:+路径);
Intent shareIntent=newintent(“com.example.FileProvider”).setData(路径);
List resinfo List=getPackageManager().queryInputActivities(仅限shareIntent、PackageManager.MATCH_DEFAULT_);
对于(ResolveInfo ResolveInfo:ResInfo列表){
字符串packageName=resolveInfo.activityInfo.packageName;
getApplicationContext().grantUriPermission(packageName、path、Intent.FLAG\u GRANT\u READ\u URI\u PERMISSION);
}
addFlags(Intent.FLAG\授予\读取\ URI\权限);
shareIntent.setAction(Intent.ACTION\u SEND);
putExtra(Intent.EXTRA_文本,“这是我正在共享的CSV”);
shareIntent.putExtra(Intent.EXTRA_流,路径);
shareIntent.setType(“文本/csv”);
startActivity(Intent.createChooser(shareIntent,“共享…”);
此.setResult(结果_OK,shareIntent);
}
这里是错误
2020-02-20 23:45:02.751 21484-21503/com.example.charleschung.mci_pa1 E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading android.support.v4.content.FileProvider uri content://com.example.FileProvider/files/sensor-1582260302226.csv from pid=21581, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:729)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:602)
at android.content.ContentProvider$Transport.query(ContentProvider.java:231)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:104)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)
我终于解决了。调出我的URI构造有一些问题。我把它改成了
Context-Context=getApplicationContext();
File filelocation=新文件(getFilesDir(),fileName);
uripath=FileProvider.getUriForFile(上下文“com.example.charleschung.mci_pa1”,filelocation);
它是有效的。希望有帮助:)首先,您应该检查生成版本代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri path = FileProvider.getUriForFile(this,getApplicationContext().getPackageName() + ".FileProvider", new File(filePath + fileName));
} else{
Uri path =Uri.fromFile(new File(filePath + fileName))
}
我希望它能帮上忙我也有这个问题,但它和你的有点不同,我试图将文件保存在一个文件夹中。我缺少的是android 10的权限,所以我在清单中添加了这一行
还有一行吗
android:requestLegacyExternalStorage=“true”
同时添加运行时权限
Manifest.permission.ACCESS\u MEDIA\u LOCATION
Uri path=FileProvider.getUriForFile(此……。
。请告诉path.toString()的值
@blackapps感谢您的回复,我已经重新格式化了代码段。路径值为'content://com.example.FileProvider/files/sensor-1582271002304.csv'.List resinfo List=getPackageManager().queryInputActivities(仅限shareIntent、PackageManager.MATCH_DEFAULT_);for(ResolveInfo ResolveInfo:Resinfo列表){String packageName=resolveInfo.activityInfo.packageName;getApplicationContext().grantUriPermission(packageName,path,Intent.FLAG\u GRANT\u READ\u URI\u PERMISSION);}
请删除该代码。您不需要它。谢谢,但删除该代码后没有任何更改。我还能做什么?