发布:2021/10/14 14:27:16作者:管理员 来源:本站 浏览次数:1128
前言:之前写过接收系统开机广播的内容,做Xamarin很多时候对于平台下的内容都是不求甚解。静态注册是在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);
}
}
}
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4