tauri-plugin-broadcast 0.1.0

Tauri plugin for android broadcast
Documentation
package com.plugin.broadcast

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.app.Activity
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import app.tauri.plugin.Invoke
import java.util.HashMap

@InvokeArg
class RegisterRequest{
    var broadcastName: String? = null;
    var eventName: String? = null;
}

@InvokeArg
class UnregisterRequest{
    var broadcastName: String? = null;
    var eventName: String? = null;
}



@TauriPlugin
class BroadcastPlugin(private val activity: Activity): Plugin(activity) {
    private val receivers = HashMap<String, BroadcastReceiver>()

    @Command
    fun register(invoke: Invoke) {
        val args = invoke.parseArgs(RegisterRequest::class.java)
        val broadcastName = args.broadcastName
        val eventName = args.eventName
        if (broadcastName == null || eventName == null) {
            invoke.reject("broadcastName and eventName are required")
            return
        }

        if (receivers.containsKey(eventName)) {
            invoke.reject("Listener for event '$eventName' already registered.")
            return
        }

        val filter = IntentFilter(broadcastName)
        val receiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                val data = JSObject()
                val bundle = intent.extras
                if (bundle != null) {
                    for (key in bundle.keySet()) {
                        val value = bundle.get(key)
                        data.put(key, value.toString())
                    }
                }
                trigger(eventName, data)
            }
        }
        activity.registerReceiver(receiver, filter)
        receivers[eventName] = receiver
        // 返回注册信息
        val ret = JSObject()
        ret.put("success", true)
        ret.put("broadcastName", broadcastName)
        ret.put("eventName", eventName ?: "")
        invoke.resolve(ret)
    }

    @Command
    fun unregister(invoke: Invoke) {
        val args = invoke.parseArgs(UnregisterRequest::class.java)
        val broadcastName = args.broadcastName
        val eventName = args.eventName
        if (eventName == null) {
            invoke.reject("eventName is required")
            return
        }

        val receiver = receivers[eventName]
        if (receiver != null) {
            activity.unregisterReceiver(receiver)
            receivers.remove(eventName)
            invoke.resolve()
        } else {
            invoke.reject("Listener for event '$eventName' not found.")
        }
    }
}