更新记录
2.0.2(2022-09-15)
安卓广播发送和广播接收,接收系统广播和自定义广播、发送自定义广播
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 10.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
==仅支持安卓环境==
简介
- Android广播发送和广播接收功能,广播接收支持接收系统广播和自定义广播,接收自定义广播可以搭配发送自定义广播使用(类似uni.emit、uni.on,不要问为什么有类似的我还写这个东西,作为Android小白就为了好玩……)
- Android系统广播是操作系统中产生的各种各样的事件。例如,收到一条短信、电量变化、是否连接电源、屏幕锁屏开屏、音量加减、home键、多任务键点击等都会发广播,此时用本插件接收这些系统发送的广播,就可以在用户做了某些动作之后代码做自己逻辑。
使用方法
-
广播接收方法(接收的是系统广播+自定义广播)://由于系统广播比较多没有全部测试
const CustomBroadcast = uni.requireNativePlugin("hudongya-broadcast-CustomBroadcast"); export default { data(){ return { actionList:[ "com.CustomBroadcast.ddd",//自定义的广播 //以下是常用系统广播参考 "android.intent.action.ACTION_POWER_CONNECTED",//插上外部电源时发出的广播 "android.intent.action.ACTION_POWER_DISCONNECTED",//已断开外部电源链接时发出的广播 "android.intent.action.SCREEN_OFF",////屏幕被关闭以后的广播 "android.intent.action.SCREEN_ON",//屏幕被打开以后的广播 "android.intent.action.CLOSE_SYSTEM_DIALOGS",//用户点击home键(homekey)和多任务键(recentapps)时(返回的reason值会有区别)、当屏幕超时进行锁屏时、当用户按下电源按钮、进行锁屏时 "android.intent.action.AIRPLANE_MODE",//关闭或打开飞行模式时的广播 "android.intent.action.BATTERY_CHANGED",//充电状态,或者电池的电量发生变化 //电池的充电状态、电荷级别改变,不能经过组建声明接收这个广播,只有经过Context.registerReceiver()注册 "android.intent.action.BATTERY_LOW",//表示电池电量低 "android.intent.action.BATTERY_OKAY",//表示电池电量充足,即从电池电量低变化到饱满时会发出广播 "android.intent.action.CAMERA_BUTTON",//按下照相时的拍照按键(硬件按键)时发出的广播 "android.intent.action.CONFIGURATION_CHANGED",//设备当前设置被改变时发出的广播(包括的改变:界面语言,设备方向,等,请参考Configuration.java) "android.intent.action.DATE_CHANGED",//设备日期发生改变时会发出此广播 "android.intent.action.HEADSET_PLUG",//在耳机口上插入耳机时发出的广播 "android.intent.action.INPUT_METHOD_CHANGED",//改变输入法时发出的广播 "android.intent.action.LOCALE_CHANGED",//设备当前区域设置已更改时发出的广播 "android.intent.action.MEDIA_BAD_REMOVAL",//未正确移除SD卡(正确移除SD卡的方法:设置--SD卡和设备内存--卸载SD卡),但已把SD卡取出来时发出的广播 "android.intent.action.MEDIA_BUTTON",//按下"Media Button" 按键时发出的广播,假若有"Media Button" 按键的话(硬件按键) "android.intent.action.MEDIA_CHECKING",//插入外部储存装置,好比SD卡时,系统会检验SD卡 "android.intent.action.MEDIA_EJECT",//已拔掉外部大容量储存设备发出的广播(好比SD卡,或移动硬盘),无论有没有正确卸载都会发出此广播 "android.intent.action.MEDIA_MOUNTED",//插入SD卡而且已正确安装(识别)时发出的广播 "android.intent.action.MEDIA_REMOVED",//外部储存设备已被移除,无论有没正确卸载,都会发出此广播 "android.intent.action.MEDIA_SCANNER_FINISHED",//已经扫描完介质的一个目录 "android.intent.action.MEDIA_SCANNER_STARTED",//开始扫描介质的一个目录 "android.intent.action.PACKAGE_ADDED",//成功的安装APK以后 "android.intent.action.PACKAGE_CHANGED",//一个已存在的应用程序包已经改变,包括包名 "android.intent.action.PACKAGE_DATA_CLEARED",//清除一个应用程序的数据时发出的广播(在设置--应用管理--选中某个应用,以后点清除数据时?) "android.intent.action.PACKAGE_INSTALL",//触发一个下载而且完成安装时发出的广播,好比在电子市场里下载应用 "android.intent.action.PACKAGE_REMOVED",//成功的删除某个APK以后发出的广播 (正在被安装的包程序不能接收到这个广播) "android.intent.action.PACKAGE_REPLACED",//替换一个现有的安装包时发出的广播(无论如今安装的APP比以前的新仍是旧,都会发出此广播) "android.intent.action.REBOOT",//重启设备时的广播 "android.intent.action.ACTION_SHUTDOWN",//关闭系统时发出的广播 "android.intent.action.TIMEZONE_CHANGED",//时区发生改变时发出的广播 "android.intent.action.TIME_SET",//时间被设置时发出的广播 "android.intent.action.TIME_TICK",//广播:当前时间已经变化(正常的时间流逝)。//当前时间改变,每分钟都发送,不能经过组件声明来接收,只有经过Context.registerReceiver()方法来注册 "android.intent.action.WALLPAPER_CHANGED",//设备墙纸已改变时发出的广播 "android.intent.action.USER_PRESENT",//用户唤醒设备 //"android.intent.action.NEW_OUTGOING_CALL",//拨打电话 需要静态注册广播+权限申请 "android.provider.Telephony.SMS_RECEIVE",//接收短信 需要对应权限<uses-permission android:name="android.permission.RECEIVE_SMS"><uses-permission> "android.media.VOLUME_CHANGED_ACTION",//音量改变 改变的音量值需要自己打印测试 android.media.EXTRA_PREV_VOLUME_STREAM_VALUE:140//是改变前的值,android.media.EXTRA_VOLUME_STREAM_VALUE:150//是改变后的值 ] } }, mounted(){ this.registerBroadcast(); }, methods: { //需要监听的所有广播一次性调用,多次调用只有最后一次填入的监听有效。 registerBroadcast (){ const actionObject = {} this.actionList.forEach((item,index)=>{ actionObject['action'+index] = item; }) CustomBroadcast.registerBroadcast(actionObject,this.registerBroadcastCallback); }, registerBroadcastCallback (message){ //message: {code:"200",action:"com.CustomBroadcast.ddd"//监听的广播,extras:"广播传输的数据"//(具体的key名根据广播的不同会有差别,可以console输出查看)} {code:"404",action:"没有需要监听的广播"} if(message.code!="200"){ console.log('code!="200" message :>> ', message); }else if(message.code=="200"){ switch (message.action) { case "com.CustomBroadcast.ddd": //自己的逻辑 break; case "android.intent.action.CLOSE_SYSTEM_DIALOGS": if(message.reason == "homekey"){//全面屏操作手势不支持 //用户点击home键 }else if(message.reason == "recentapps"){//全面屏操作手势不支持 //用户点击多任务键 }else if(message.reason == "fs_gesture"){//使用全面屏操作手势 //用户使用全面屏手势操作 } break; default: break; } } }, //取消监听。 unregisterBroadcast (){ CustomBroadcast.registerBroadcast({}); }, } }
-
自定义广播发送方法(发送的自定义广播):
//action为广播监听的字段(例如:"com.CustomBroadcast.ddd") //option为广播填充的参数(选填,填充的数据供广播接收者使用,支持 string int boolean) //option格式为: /* {//key名称自定义,不重复即可 "flag1":"1", "flag2":1, "flag3":true, } */ sendCustomBroadcast (action,option){ CustomBroadcast.sendCustomBroadcast(action,option); },
注意事项
- registerBroadcast方法注册监听广播时,actionObject对象的key名称不要重复。
- Android系统广播比较多,没有全部测试过,没有列举出监听的系统广播字符串需要自己查Android文档或自己搜索。
- sendCustomBroadcast方法发送自定义广播时,选填的参数数据key名称不要重复。