导航:首页 > 操作系统 > 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系统广播事件相关的资料

热点内容
android滑动进度条 浏览:833
javagmt转换 浏览:824
linux查看snmp 浏览:22
ug80车床编程 浏览:514
怎么加速python计算素数 浏览:238
腰椎第五节压缩性骨折 浏览:89
程序员开会的句子 浏览:990
用哪个app写编程 浏览:643
android通讯录增删改查 浏览:727
车贷解压过户可以同时进行吗 浏览:917
java面向对象编程题目 浏览:876
二次元压缩包 浏览:698
stc仿真器编程器 浏览:155
服务器销售怎么做好 浏览:87
什么是com编程 浏览:848
算法工程师最新资讯 浏览:608
邮政银行卡怎么在app签约绑定 浏览:49
压缩卷一直转 浏览:978
初一编程小程序怎么做 浏览:828
bt软件文件夹名称 浏览:159