gpt4 book ai didi

android - 在 flutter 插件类中捕获 onNewIntent()

转载 作者:行者123 更新时间:2023-12-05 03:00:00 26 4
gpt4 key购买 nike

问题标题可能有点令人困惑。我会尝试解释更多细节。

我正在编写一个 flutter 插件来使用 NFC。

我有一个示例 Android Activity,它在接收到 NDEF 消息时触发 onNewIntent()。此时消息负载已准备好使用。

class MainActivity : AppCompatActivity() {
private var mNfcAdapter: NfcAdapter? = null
private var mPendingIntent: PendingIntent? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

mNfcAdapter = NfcAdapter.getDefaultAdapter(this)

mPendingIntent = PendingIntent.getActivity(
this, 0,
Intent(this, this.javaClass)
.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0
)
}

override fun onResume() {
super.onResume()
mNfcAdapter?.enableForegroundDispatch(this, mPendingIntent, null, null)
}

override fun onPause() {
super.onPause()
mNfcAdapter?.disableForegroundDispatch(this)
}

override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages ->
val messages: List<NdefMessage> = rawMessages.map { it as NdefMessage }

parseNDEFMessage(messages)
}
}
}

private fun parseNDEFMessage(messages: List<NdefMessage>) {
//do parsing and display payload
}

我需要在插件类中具有相同的功能。

这是我的插件类

class NfcforflutterPlugin(private var activity: Activity?) : MethodCallHandler, EventChannel.StreamHandler {
private var mNfcAdapter: NfcAdapter? = null
private var mPendingIntent: PendingIntent? = null
private var mEventSink: EventChannel.EventSink? = null

companion object {
@JvmStatic
fun registerWith(registrar: Registrar) {
var nfcforflutterPlugin = NfcforflutterPlugin(registrar.activity())
val channel = MethodChannel(registrar.messenger(), "nfcforflutter")
channel.setMethodCallHandler(nfcforflutterPlugin)
val eventChannel = EventChannel(registrar.messenger(), "nfcforflutter")
eventChannel.setStreamHandler(nfcforflutterPlugin)
}
}

fun getNDEFMessage(): String{
return "CALLED getNDEFMessage"
}

fun initializeNFCReading():Boolean {
mNfcAdapter = NfcAdapter.getDefaultAdapter(activity)

if(!checkNFCEnable())
return false
val intent = Intent(activity?.applicationContext, activity?.javaClass)
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)

val pendingIntent = PendingIntent.getActivity(activity?.applicationContext, 0, intent, 0)

mNfcAdapter?.enableForegroundDispatch(activity, pendingIntent, null, null)
return true
}

private fun checkNFCEnable(): Boolean {
return if (mNfcAdapter == null) {
false
} else {
mNfcAdapter!!.isEnabled
}
}

override fun onMethodCall(call: MethodCall, result: Result) {
if (call.method == "getPlatformVersion") {
result.success("Android ${android.os.Build.VERSION.RELEASE}")
return
}
if (call.method == "getNDEFMessage") {
result.success(getNDEFMessage())
return
}
if (call.method == "initializeNFCReading") {
result.success(initializeNFCReading())
return
}

result.notImplemented()

}

override fun onListen(p0: Any?, eventSink: EventChannel.EventSink?) {
mEventSink = eventSink
}

override fun onCancel(p0: Any?) {
}

因为 NfcforflutterPlugin 不是 Activity,所以我需要在 NfcforflutterPlugin 类中触发事件作为将在 Android Activity 中调用的 onNewIntent()在消息发现时刻,这样我就可以运行 mEventSink.success(ndefMessage) 并将消息传递给 Flutter 端。

有什么想法吗?

最佳答案

实现 PluginRegistry.NewIntentListener 来监听 Intent 方法。检查here .

它有 onNewIntent 方法。你可以使用它。喜欢,

class NfcforflutterPlugin(private var activity: Activity?) : MethodCallHandler, EventChannel.StreamHandler, PluginRegistry.NewIntentListener {
....................
....................
override fun onNewIntent(intent:Intent):Boolean {
//handle data with intent
return false;
}
}

关于android - 在 flutter 插件类中捕获 onNewIntent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57369216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com