Flutter 找不到具有权限的提供者的元数据
Posted
技术标签:
【中文标题】Flutter 找不到具有权限的提供者的元数据【英文标题】:Flutter Couldn't find meta-data for provider with authority 【发布时间】:2020-03-01 15:28:18 【问题描述】:我有一个使用 flutter_webview_plugin 0.3.8
的应用程序。我在 webview 中打开一个网页并显示其内容。页面中有一个按钮,当您按下它时,它应该像在普通的网络浏览器(如 chrome)中一样打开一个文件资源管理器。该按钮在 chrome 中工作正常,它打开一个底部小部件以选择一个操作(相机、文件、 ...)。但在我的网络视图中,它因错误Couldn't find meta-data for provider with authority com.example.booshehr.fileprovider
而崩溃。完整的错误是:
W/System.err(15213): java.lang.IllegalArgumentException: Couldn't find meta-data for provider with authority com.example.booshehr.fileprovider
W/System.err(15213): at androidx.core.content.FileProvider.parsePathStrategy(FileProvider.java:606)
W/System.err(15213): at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:579)
W/System.err(15213): at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:417)
W/System.err(15213): at com.flutter_webview_plugin.WebviewManager.getOutputFilename(WebviewManager.java:272)
W/System.err(15213): at com.flutter_webview_plugin.WebviewManager.access$800(WebviewManager.java:42)
W/System.err(15213): at com.flutter_webview_plugin.WebviewManager$3.onShowFileChooser(WebviewManager.java:211)
W/System.err(15213): at In.a(PG:145)
W/System.err(15213): at uE0.runFileChooser(PG:2)
W/System.err(15213): at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err(15213): at android.os.MessageQueue.next(MessageQueue.java:325)
W/System.err(15213): at android.os.Looper.loop(Looper.java:142)
W/System.err(15213): at android.app.ActivityThread.main(ActivityThread.java:6710)
W/System.err(15213): at java.lang.reflect.Method.invoke(Native Method)
W/System.err(15213): at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
W/System.err(15213): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
F/chromium(15213): [FATAL:jni_android.cc(249)] Please include Java exception stack in crash report
F/libc (15213): Fatal signal 5 (SIGTRAP), code 1 in tid 15213 (xample.booshehr)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'lge/elsa_global_com/elsa:8.0.0/OPR1.170623.032/18325232422a1:user/release-keys'
Revision: '12'
ABI: 'arm64'
pid: 15213, tid: 15213, name: xample.booshehr >>> com.example.booshehr <<<
signal 5 (SIGTRAP), code 1 (TRAP_BRKPT), fault addr 0x714216eb04
x0 0000000000000000 x1 0000000000000081 x2 000000007fffffff x3 0000000000000000
x4 0000000000000000 x5 0000000000000000 x6 0000000000000000 x7 7f7f7f7f7fffff7f
x8 0000000000000000 x9 0000000000000000 x10 0000000000000001 x11 0000000000000000
x12 0000007134d6ff00 x13 0000000000000000 x14 0000000000000000 x15 000000716228c000
x16 000000715dfd2208 x17 000000715df25c50 x18 000000006fba3d30 x19 0000007fd17f5c70
x20 0000007fd17f5c78 x21 0000007fd17f5c80 x22 000000000000004f x23 000000715dfd4808
x24 0000007143e3f000 x25 0000007fd17f5e70 x26 0000000000000001 x27 0000007162612a48
x28 0000007162612a48 x29 0000007fd17f5c60 x30 000000714216e9c4
sp 0000007fd17f57b0 pc 000000714216eb04 pstate 0000000060000000
backtrace:
#00 pc 0000000001e9fb04 /data/app/com.android.chrome-HU8bsIOJpUMqks882ELhSA==/base.apk (offset 0xc19000)
#01 pc 0000000001e9f9c0 /data/app/com.android.chrome-HU8bsIOJpUMqks882ELhSA==/base.apk (offset 0xc19000)
我已经尝试将provider
添加到androidmanifest,仍然是同样的错误:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="$applicationId.fileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"
tools:replace="android:resource" />
</provider>
我的@xml/filepaths
是:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="myapp" path="images/"/>
</paths>
然后我尝试将 android:authorities="$applicationId.fileProvider"
更改为 android:authorities="$applicationId.myOwnFileProvider"
,仍然是同样的错误。
请帮助我。
【问题讨论】:
【参考方案1】:从抛出的日志来看,看起来一个 Android 应用正在使用一个意图启动。 WebView 内显示的按钮的功能是什么?您可以使用 android_intent 插件通过意图在 Android 上启动应用程序,即
if (Platform.isAndroid)
final AndroidIntent intent = AndroidIntent(
action: 'action_view', // Update with the required action flag
data: 'package:com.example.booshehr.fileprovider',
);
await intent.launch();
此问题的另一个可能原因是您使用的插件可能尚未支持您所运行的平台。
【讨论】:
以上是关于Flutter 找不到具有权限的提供者的元数据的主要内容,如果未能解决你的问题,请参考以下文章
C 找数组中最小的元数,找出最小数下标并返回,在主函数中打印最小数和下标?
找不到 EntityType 错误的 EF 映射和元数据信息
Flutter cubit blocprovider 找不到正确的提供者
Flutter真机调试找不到设备:ERROR: Could not connect to lockdownd, error code -17