23

可以使用 Flutter 应用程序中的 Intent 启动另一个 Activity: https ://github.com/flutter/flutter/blob/master/examples/widgets/launch_url.dart

import 'package:flutter/widgets.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(new GestureDetector(
    onTap: () {
      Intent intent = new Intent()
        ..action = 'android.intent.action.VIEW'
        ..url = 'http://flutter.io/';
      activity.startActivity(intent);
    },
    child: new Container(
      decoration: const BoxDecoration(
        backgroundColor: const Color(0xFF006600)
      ),
      child: new Center(
        child: new Text('Tap to launch a URL!')
      )
    )
  ));
}

但是,当 Intent 传递给应用程序时,可以使用 Flutter Activity Intent 服务执行以下操作吗? http://developer.android.com/training/sharing/receive.html

. . .
void onCreate (Bundle savedInstanceState) {
    ...
    // Get intent, action and MIME type
    Intent intent = getIntent();
. . .
4

2 回答 2

11

据我所知,目前无法处理来自 Dart 代码的传入 Intent。具体来说,处理传入 URL 的情况由https://github.com/flutter/flutter/issues/357跟踪。

也可以使用https://flutter.io/platform-services/中记录的 HostMessage 系统处理来自 Java 代码的传入意图并将结果发布到 Dart

2020 年更新-接受来自 Flutter Doc 的 Flutter 中的传入意图

于 2016-12-06T05:11:06.463 回答
3

这也许可以帮助你,thios 展示了如何处理 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>

在 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);
  }
}

最后得到它

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;
      });
    }
  }
}

但是如果需要向 android 系统发送真正的意图,你可以使用这个库

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

于 2018-09-02T18:05:31.400 回答