--------- beginning of crash
2024-12-16 15:58:06.036 24405-24405/com.buyuphk.specialline1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.buyuphk.specialline1, PID: 24405
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:605)
at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:579)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:417)
at com.buyuphk.specialline1.mvp.ui.activity.UploadSignedPhotoActivity.openCamera(UploadSignedPhotoActivity.java:170)
at com.buyuphk.specialline1.mvp.ui.activity.UploadSignedPhotoActivity.onClick(UploadSignedPhotoActivity.java:140)
at android.view.View.performClick(View.java:7570)
at android.view.View.performClickInternal(View.java:7540)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:29721)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8423)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
2024-12-16 15:58:06.037 24405-24405/com.buyuphk.specialline1 D/debug: 打印抛出没有捕获到异常的线程名->main
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
2024-12-16 15:58:06.042 5523-25412/? W/MediaProvider: Forgot to handle a top level directory in getContentUriForFile?
2024-12-16 15:58:06.043 5523-25412/? E/MediaProvider: insertFileIfNecessary failed
java.lang.IllegalArgumentException: Primary directory BuyupSpecialLine not allowed for content://media/external_primary/file; allowed directories are [Download, Documents]
at com.android.providers.media.MediaProvider.ensureFileColumns(MediaProvider.java:3953)
at com.android.providers.media.MediaProvider.ensureUniqueFileColumns(MediaProvider.java:3591)
at com.android.providers.media.MediaProvider.insertFile(MediaProvider.java:4363)
at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:4949)
at com.android.providers.media.MediaProvider.insert(MediaProvider.java:4649)
at com.android.providers.media.MediaProvider.insertFileForFuse(MediaProvider.java:9218)
at com.android.providers.media.MediaProvider.insertFileIfNecessaryForFuse(MediaProvider.java:9313)
这个奔溃的原因是:没有注册文件提供器
解决办法:新建一个MyFileProvider继承 FileProvider
public class MyFileProvider extends FileProvider{
}
然后在Manifest注册
<provider
android:name="com.domain.app.VersionFileProvider"
android:authorities="com.domain.app.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文件,内容如下,放入xml资源目录
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external_files"
path="." />
<root-path
name="root_path"
path="." />
</paths>