隐藏

Xamarin.Android App接收其他App的广播及其参数

发布:2021/10/14 14:27:16作者:管理员 来源:本站 浏览次数:1128

前言:之前写过接收系统开机广播的内容,做Xamarin很多时候对于平台下的内容都是不求甚解。

这次接收的是第三方App的广播,查了一下广播相关的东西。

广播分为静态和动态的,接收系统开机广播用的是静态注册的,也只能静态的,因为App还没启动,肯定动态调不起来啊。

 

1. 接收到第三方app的广播。

我抄了下接收开机广播的方法, 结果第三方app广播后,我这边就报错。

静态注册是在AndroidManifest.xml里面application节点下写一下内容,通过action android:name来匹配对应的广播。

Java.lang.RuntimeException: Unable to instantiate receiver “”         didn't find class on path dexpathlist

其实能报错,说明广播被触发了,action名称配置什么的应该都对,但是问题在哪还是不知道,后面查资料说是有可能是因为注册的顺序问题,于是改成动态注册。

在MainActivity启动后用代码注册receiver,  就可以正常接收到了。

2. 接收广播参数

一个receiver可以接收多个多个广播内容,通过intent.Action来判断是哪个广播,对应获取参数。

需要根据参数的类型调用不同的方法来获取

获取整数参数的方法intent.GetIntExtra(参数名称,默认值),, 文本intent.GetStringExtra(参数名称)等等。
    [BroadcastReceiver(Enabled = true, Exported = true)]
    public class BootReceiver1 : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            var action = intent.Action;
 
 
            //开启定时开关机 :参数 mode ==someday/week/everyday   offTime    onTime
            // int EVERYDAY = 1;
            //int SOMEDAY = 2;
            // int WEEK = 3;
            if (action == "xxxx.action.ACTION_POWER_ON_OFF")
            {
                var mode = intent.GetIntExtra("mode", -1);
                var offTime = intent.GetLongExtra("offTime", -1);
                var onTime = intent.GetLongExtra("onTime", -1);
 
                System.DateTime offDateTime = XamarinApp.StandardLib.TimeHelper.UnixMil2DateTime(offTime);
                System.DateTime onDateTime = XamarinApp.StandardLib.TimeHelper.UnixMil2DateTime(onTime);
                //保存到缓存。
                HcData.HcConfig.PowerOnOffMode = mode;
 
            }
            //取消定时开关机
            if (action == "xxx.action.ACTION_CANCEL_POWER_ON_OFF")
            {
                HcData.HcSerialPortMgr.SetPowerOnOff(-1, -1);
            }
 
 
        }
    }