微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Flutter 共享插件共享文件时出现 PlatformException

如何解决使用 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 举报,一经查实,本站将立刻删除。