Is it possible to register a Flutter app as an Android Intent Filter and to handle Incoming Intents?

后端 未结 2 1234
[愿得一人]
[愿得一人] 2021-02-18 16:26

One can launch another Activity using an Intent from a Flutter app: https://github.com/flutter/flutter/blob/master/examples/widgets/launch_url.dart

import \'pac         


        
相关标签:
2条回答
  • 2021-02-18 16:54

    To my knowledge, there is no way to handle incoming Intents from Dart code at this time. Specifically the case of handling incoming URLs is tracked by https://github.com/flutter/flutter/issues/357.

    It's also possible to handle incoming intents from Java code and post the result across to Dart using the HostMessage system documented at https://flutter.io/platform-services/

    Update 2020- Accept incoming intent in the Flutter from Flutter Doc

    0 讨论(0)
  • 2021-02-18 17:06

    This maybe can help u, thios show how to handle https://flutter.io/flutter-for-android/#what-is-the-equivalent-of-an-intent-in-flutter

    <activity
      android:name=".MainActivity"
      android:launchMode="singleTop"
      android:theme="@style/LaunchTheme"
      android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection"
      android:hardwareAccelerated="true"
      android:windowSoftInputMode="adjustResize">
      <!-- ... -->
      <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
      </intent-filter>
    </activity>
    

    On MainActivity

    public class MainActivity extends FlutterActivity {
    
      private String sharedText;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);
        Intent intent = getIntent();
        String action = intent.getAction();
        String type = intent.getType();
    
        if (Intent.ACTION_SEND.equals(action) && type != null) {
          if ("text/plain".equals(type)) {
            handleSendText(intent); // Handle text being sent
          }
        }
    
        MethodChannel(getFlutterView(), "app.channel.shared.data")
          .setMethodCallHandler(MethodChannel.MethodCallHandler() {
            @Override
            public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
              if (methodCall.method.contentEquals("getSharedText")) {
                result.success(sharedText);
                sharedText = null;
              }
            }
          });
      }
    
      void handleSendText(Intent intent) {
        sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
      }
    }
    

    And finally to get it

    class _SampleAppPageState extends State<SampleAppPage> {
      static const platform = const MethodChannel('app.channel.shared.data');
      String dataShared = "No data";
    
      @override
      void initState() {
        super.initState();
        getSharedText();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(body: Center(child: Text(dataShared)));
      }
    
      getSharedText() async {
        var sharedData = await platform.invokeMethod("getSharedText");
        if (sharedData != null) {
          setState(() {
            dataShared = sharedData;
          });
        }
      }
    }
    

    But if need to send a real intent to android system u can use this library

    https://github.com/flutter/plugins/tree/master/packages/android_intent

    0 讨论(0)
提交回复
热议问题