如何使用android处理Flutter中来自外部应用程序的传入Intent:launchMode =" singleInstance"

时间:2018-01-04 03:20:56

标签: android-manifest flutter

在Flutter文档here如何处理Flutter中外部应用程序的传入Intent 清单显示android:launchMode="singleTop",共享文本在状态变量中使用void initState()方法在颤动getSharedText();中传输。

无论如何,每当我与应用程序共享文本时,都会创建一个新的应用程序实例。 所以我将清单更改为清单android:launchMode="singleInstance"(或singleTask)。

在这种情况下,void initState()仅被调用一次,不能再用于调用getSharedText();。我尝试使用AppLifecycleState.resumed来调用getSharedText();,但数据始终为空。我希望扑腾有这样的示例项目。我找不到他们。任何提示?

2 个答案:

答案 0 :(得分:1)

这个问题的答案可能是uni_links package

您只需为传入的App / Deep链接设置一个侦听器,然后调用所需的任何方法即可:)

我这样做是这样的:

_linkStream = getUriLinksStream().listen((uri) {
  if (uri.host == 'redirect' && uri.queryParameters.containsKey('code')) { // Checking the url

    // Do my stuff here

    _linkStream.cancel();
  }
});

_linkStream是我班上的StreamSubscription<Uri>属性。另外,请不要忘记在dispose()方法中dispose()进行订阅!

答案 1 :(得分:0)

通过此插件receive_sharing_intent,我设法达到了android:launchMode="singleInstance"(或singleTask)的意图。

此方法适用于文本:

ReceiveSharingIntent.getTextStream().listen((String value) {
  setState(() {
    _sharedText = value;
  });
}, onError: (err) {
  print("getLinkStream error: $err");
});

当前(9月24日),该插件还支持图片和视频。

但是,我没有进一步研究该插件,所以我不能说如何直接用Java / Kotlin实现它。