更新记录

2.0.2(2022-09-15)

安卓广播发送和广播接收,接收系统广播和自定义广播、发送自定义广播


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 10.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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原生插件配置”->”云端插件“列表中删除该插件重新选择


==仅支持安卓环境==

简介

  1. Android广播发送和广播接收功能,广播接收支持接收系统广播和自定义广播,接收自定义广播可以搭配发送自定义广播使用(类似uni.emit、uni.on,不要问为什么有类似的我还写这个东西,作为Android小白就为了好玩……)
  2. Android系统广播是操作系统中产生的各种各样的事件。例如,收到一条短信、电量变化、是否连接电源、屏幕锁屏开屏、音量加减、home键、多任务键点击等都会发广播,此时用本插件接收这些系统发送的广播,就可以在用户做了某些动作之后代码做自己逻辑。

使用方法

  1. 广播接收方法(接收的是系统广播+自定义广播)://由于系统广播比较多没有全部测试

    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({});
        },
    }
    }
  2. 自定义广播发送方法(发送的自定义广播):

    //action为广播监听的字段(例如:"com.CustomBroadcast.ddd")
    //option为广播填充的参数(选填,填充的数据供广播接收者使用,支持 string int boolean)
    //option格式为:
    /* 
    {//key名称自定义,不重复即可
     "flag1":"1",
     "flag2":1,
     "flag3":true,
    }
    */
    sendCustomBroadcast (action,option){
    CustomBroadcast.sendCustomBroadcast(action,option);
    },

注意事项

  1. registerBroadcast方法注册监听广播时,actionObject对象的key名称不要重复。
  2. Android系统广播比较多,没有全部测试过,没有列举出监听的系统广播字符串需要自己查Android文档或自己搜索。
  3. sendCustomBroadcast方法发送自定义广播时,选填的参数数据key名称不要重复。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问