导航:首页 > 操作系统 > android系统广播事件

android系统广播事件

发布时间:2023-07-26 13:39:23

① 12、注册广播有几种方式,这些方式有何优缺点请谈谈android引入广播机制的用意。

  1. 注册广播的分类:静态注册和动态注册。

    静态注册:在清单文件里直接注册,从app开启到app销毁,一直在接收广播,接收广播时间长,但是接收广播的优先级低于动态注册广播。

    动态注册:动态注册,动态销毁,从onCreate到取消注册,期间接收广播,接收广播时间是短且可控,接收广播的优先级高。例如:

    发送广播:
    Intent i = new Intent();
    i.setAction("ACTION_CLOSE");
    sendBroadcast(i);

    接受广播:
    onCreate(){

    //注册广播的接受者
    IntentFilter filter = new IntentFilter();
    filter.addAction("ACTION_CLOSE_ACTIVITY");
    receiver = new InnerReceiver();
    registerReceiver(receiver, filter);
    }

    private class InnerReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //TODO 当前Activity接收到广播 需要做的事情
    }
    }
    }

    //注销广播

    @Override
    protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(receiver);
    }


2.引入广播的原因:

a) 不同的app之间传信通用

b)发出一条指定,需要多个Activity都需要有反应


注意:以上仅供参考,如有疑问,请追问,谢谢。

② 简述在android中如何发送广播消息

1.发送广播
Intent intent = new Intent(BroadcastAction);
Bundle bundle = new Bundle();
bundle.putString("***", SUCCESS);
bundle.putString("FullPathName", mFullPathName);
intent.putExtras(bundle);
sendBroadcast(intent);
2.在Activity中创建一个内部类MyBroadcastReceiver扩展BroadcastReceiver,并在其中实现onReceive方法。
3.在Activity中声明一个MyBroadcastReceiver类型的成员变量,并注册:
private MyBroadcastReceiver myBroadcastReceiver;
...
myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BroadcastAction);
registerReceiver(receiver, filter);
4.使用完后要记得释放
unregisterReceiver(receiver);

注:1和2中的 BroadcastAction要是同一个Action

③ android的混合开发 JS页面能接收广播吗 在网页接收不到蓝牙按键的事件和广播

不是手机的问题,耳机的问题。
蓝牙耳机不止一种,我所知的一种是a2dp的一种不是a2dp的,a2dp的耳机就是可以听歌的,另外一种不能听歌
对于a2dp的耳机,如果短按一次hook键,系统会当作一个keyevent来处理,走的是发送广播的流程。如果短按多次,或者长按一次hook 键,不会有keyevent,会当作一个类似与“BVRA”的AP命令来处理,处理过程可以参考源码的BluetoothHandsfree.java, 这个时候就收不到广播。
而对于不是a2dp的耳机,无论怎样按按键,都是发送ap命令,不会收到keyevent。
解决方法有两个,一是换个耳机,二是改rom,在蓝牙bsp那部分,无论什么耳机都走keyevent的流程

④ android service的监听前台点击事件怎么写

  1. 第一种办法是广播,一般来说系统对于音量键和Home键会发送广播,我们可以再广播中监听这些按键信息。具体的IntentFilter怎么写,大家可以网络一下。

  2. 第二种办法仍然是广播,不过这就需要修改SDK了,在WindManagerService里面,分发按键事件的时候的发送特殊的广播的,这个改动可能比较麻烦。

  3. 第三种办法是直接读取输入设备文件,一般该文件位于/dev/input/文件夹下面,不过里面一般有多个文件,具体哪个文件描述的哪一个输入设备,需要大家进行尝试。设备的文件的读取需要使用c或者c++来完成。具体的实现代码可以参考:https://github.com/radhoo/android-event-injector。这种办法需要有root权限才行,而且读取的键值是没有做过转换的,也就是说和我们平常使用的键值是不一样的。其实大家可以在adb shell中,通过getevent查看。

  4. 第四种办法是使用系统的无障碍服务,也就是AccessibilityService。我最终采用的方式就是这个,因为这个不仅可以监听按键,还能拦截。关于AccessibilityService的实现,网上讲的比较多了。我这里只提几个需要注意的点:

阅读全文

与android系统广播事件相关的资料

热点内容
linux内核编译视频教程 浏览:881
程序员厚黑 浏览:187
如何在闲鱼淘二手安卓机 浏览:175
怎么下载晨星app 浏览:132
两台服务器如何同步内容 浏览:808
服务器共用一个ip有什么坏处 浏览:461
go加密exe 浏览:606
pdf改分栏 浏览:123
python执行怎么写 浏览:766
遇见她app怎么加好友 浏览:548
手机怎么设置app强制提醒 浏览:77
怎样不用海绵做解压玩具 浏览:81
为什么远程服务器复制不了文件 浏览:715
打开app闪退怎么回事 浏览:752
bcrpt加密原理 浏览:401
女程序员写的小说 浏览:774
华为路由器ip设置命令 浏览:552
如何打开软件服务器 浏览:756
单片机接口技术及应用 浏览:751
linux下执行脚本文件 浏览:127