如何解决使用 Flutter 共享插件共享文件时出现 PlatformException
我正在尝试从小部件创建图像并将其存储到文件中。然后允许用户共享图像。我们使用的是 Flutter 官方分享插件: https://pub.dev/packages/share
这是我的主要逻辑:
void _convertReportToImageAndShare() async {
final RenderRepaintBoundary renderRepaintBoundary =
_containerKey.currentContext.findRenderObject();
final image = await renderRepaintBoundary.toImage();
final byteData = await image.toByteData(format: ImageByteFormat.png);
final pngBytes = byteData.buffer.asUint8List();
final tempDir = (await getTemporaryDirectory()).path;
final filePath = '$tempDir/image.png';
final file = await File(filePath).create();
file.writeAsBytesSync(pngBytes);
await Share.shareFiles([filePath]);
}
该函数可以在iOS模拟器上成功运行。但是,在Android设备上运行时,会抛出PlatformException:
The following PlatformException was thrown:
PlatformException(error,Couldn't find Meta-data for provider with authority
{my application id}.Flutter.share_provider,null,java.lang.IllegalArgumentException:
Couldn't find Meta-data for provider with authority
{my application id}.Flutter.share_provider
at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:662)
at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:635)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:441)
at io.Flutter.plugins.share.Share.getUrisForPaths(Share.java:128)
at io.Flutter.plugins.share.Share.shareFiles(Share.java:69)
at io.Flutter.plugins.share.MethodCallHandler.onMethodCall(MethodCallHandler.java:42)
at io.Flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
at io.Flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
at io.Flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:738)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:326)
at android.os.Looper.loop(Looper.java:160)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
)
When the exception was thrown,this was the stack:
#0 StandardMethodCodec.decodeEnvelope (package:Flutter/src/services/message_codecs.dart:582:7)
#1 MethodChannel._invokeMethod (package:Flutter/src/services/platform_channel.dart:159:18)
<asynchronous suspension>
我检查了源代码,share_provider 定义在 https://github.com/flutter/plugins/blob/master/packages/share/android/src/main/AndroidManifest.xml
我该如何解决这个问题?我需要修改 AndroidManifest.xml 中的某些内容吗?谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。