错误日志
java.lang.NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)’ on a null object reference
at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:584)
at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:558)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400)
at com.example.zyj.pokketplanner.notes.AddNotesActivity.getOutputMediaFileUri(AddNotesActivity.java:337)
at com.example.zyj.pokketplanner.notes.AddNotesActivity$OnClick.onClick(AddNotesActivity.java:206)
at android.view.View.performClick(View.java:6669)
at android.view.View.performClickInternal(View.java:6638)
at android.view.View.access
3100
(
V
i
e
w
.
j
a
v
a
:
789
)
a
t
a
n
d
r
o
i
d
.
v
i
e
w
.
V
i
e
w
3100(View.java:789) at android.view.View
3100(View.java:789)atandroid.view.ViewPerformClick.run(View.java:26145)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6863)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
03-24 21:26:48.562 563-563/? E/SELinux: avc: denied { find } for service=opdiagnose pid=5231 uid=10210 scontext=u:r:untrusted_app_27:s0:c512,c768 tcontext=u:object_r:opdiagnose_service:s0 tclass=service_manager permissive=0
03-24 21:26:48.563 563-563/? E/SELinux: avc: denied { find } for service=opdiagnose pid=5231 uid=10210 scontext=u:r:untrusted_app_27:s0:c512,c768 tcontext=u:object_r:opdiagnose_service:s0 tclass=service_manager permissive=0
Manifest配置
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.zyj.pokketplanner.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
file_paths文件
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="temp"
path="ANotes" />
</paths>
获取UIR
Uri contentUri = FileProvider.getUriForFile(context,
"com.example.zyj.pokketplanner.provider",//与清单文件中android:authorities的值保持一致
mediaFile);/
以上配置都没错,但就是会报错
原因:provider配置应位于Manifest的application层级下,如图
问题解决
参考了承香墨影(cxmyDev)大佬的文章
简书FileProvider详解