gpt4 book ai didi

Android resolveContentProvider 返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:25 25 4
gpt4 key购买 nike

我想在我的应用程序中执行以下操作。首先我需要登录。然后,登录后我退出我的应用程序。但是它在后台运行。登录记录仍然有效。然后我需要从文件浏览器中选择一个文件。选择文件后,我按共享选项。然后我选择我的应用程序对文件进行一些操作。在对文件进行操作后,我将其记录到缓存中。然后我想在其他一些合适的应用程序上打开这个文件。我可以完成所有这些操作,但是在调用 getUriForFile 方法时出现问题。

String mimeType = getMimeType(fileUri);//returns mime type

File imagePath = new File(context.getCacheDir(), "/");
String fileUriStr = fileUri.getLastPathSegment();
File newFile = new File(imagePath, fileUriStr);
try {
newFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
uri = FileProvider.getUriForFile(context, context.getPackageName(), newFile);

在 Manifest 中我添加了一个 fileProvider。

<activity
android:name=".MainActivity"
android:label="@string/app_name">

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.share"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

<!--Normal way opener -->
<intent-filter android:label="appName">
<action android:name="android.intent.action.MAIN" />
</intent-filter>

<!--From share options opener -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="*/*" />
</intent-filter>
</activity>

在 file_paths.xml 中我有以下代码:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="cache_docs" path="data/data/com.app.firm.app/cache" />

</paths>

我打开了 FileProvider.java 文件。我从以下位置得到错误:

final ProviderInfo info = context.getPackageManager()
.resolveContentProvider(authority, PackageManager.GET_META_DATA);
final XmlResourceParser in = info.loadXmlMetaData(
context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);
if (in == null) {
throw new IllegalArgumentException(
"Missing " + META_DATA_FILE_PROVIDER_PATHS + " meta-data");
}

信息参数为空。因此,当程序调用 info.loadXmlMetaData 时,它会出现空指针异常。所以 context.getPackageManager 返回 null。记得当时我有两个应用程序同时运行。其中之一遵循自然流程(即 -> 登录和主要 Activity )。另一个只是从 MainActivity 打开。 context.getPackageManager 从第二个运行的应用程序调用。请帮助我

最佳答案

我知道如何解决这个问题,我想我可以帮助你。

也许你有两个<provider> , Lib 中的一个,你的项目之一

您可以自定义类扩展 FileProvider , 并更改 <provide>自定义名称标签 FileProvider :

<provider
android:name="XXXX.YourCustomFileProvider"
android:authorities="${applicationId}.share"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

然后问题就解决了。

谢谢!

关于Android resolveContentProvider 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39200483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com