Android 开发 – 接收从其他应用分享的内容 (Kotlin/Flutter)

  • 2019-10-07
  • 45
  • 0
  • 0

今天写 BiliDataV2 的时候遇到了这个问题,因为 Flutter 没办法直接获取 Intent 的分享内容,于是去网上找资料,资料都是修改 MainActivity.java。

但是Flutter 创建的应用 MainActivity 都是 Kotlin 语言写的了。

尝试使用 AndroidStudio 自带的转换功能,虽然没有报错但实际上不能用。

经过查询Google官方开发者资料,写出了如下代码:

MainActivity.kt:

package top.bilidata.bilidata_v2

import android.content.Intent
import android.os.Bundle

import io.flutter.app.FlutterActivity
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant

var share = ""

class MainActivity: FlutterActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)

    when {
      intent?.action == Intent.ACTION_SEND -> {
        if ("text/plain" == intent.type) {
          handleSendText(intent) // Handle text being sent
        }
      }
    }

    MethodChannel(flutterView, "app.channel.shared.data")
            .setMethodCallHandler { methodCall, result ->
              if (methodCall.method.contentEquals("getSharedText")) {
                result.success(share)
                share = "";
              }
            }
  }
}

private fun handleSendText(intent: Intent) {
  share = intent.getStringExtra(Intent.EXTRA_TEXT)
}

Main.dart:

  static const platform = const MethodChannel('app.channel.shared.data');
  String dataShared = "No data";

  @override
  void initState() {
    super.initState();
    getSharedText();
  }

  getSharedText() async {
    var sharedData = await platform.invokeMethod("getSharedText");
    if (sharedData != null) {
      print('Shared Data: ' + sharedData);
      setState(() {
        dataShared = sharedData;
      });
    }
  }

实测可用 获取分享内容。

评论

还没有任何评论,你来说两句吧

隐藏
变装