【Android】监听蓝牙状态变化
2016-02-24 06:48
435 查看
【关键词】
【问题】
广播的用法;
使用LocalBroadcastManager注册蓝牙广播,接收不到消息;
【解决方案】
在自定义广播的时候才使用LocalBroadcastManager,并且需求是:广播只在本APP中有效;
不要尝试通过LocalBroadcastManager操作(注册,取消注册,发送)系统的广播;
【权限】
【注册】
【注销】
【代码】
【参考资料】
LocalBroadcastManagervsContext.registerReceiver(),
Context.sendBroadcast(Intent),andContext.unregisterReceiver()aretheysame?
LocalBroadcastManagerisasitsnamesays,animplementationofthebroadcastmethodsthatareonlyavailabletoyourapp.Thishassomebenefits,withthebiggestbeingsafety,onelessholeto
watchoutfor.Intermsofimplementation,thereareafewthingstokeepinmind:
ThisclassisfromtheAndroidSupportLibrary
Themethodcallshavetobeprefacedwith
asubclassoftheContextclass,suchasActivity.
Whenyouusethisclass,itispurelyforyourapp.Usingittoregisterreceiversandmakebroadcaststhataresystemwidewillfail.
SothisclassisnotthesameasContext,itissimplyaveryspecific,app-onlyimplementationofContext'sreceiver/broadcastmethods.Youshoulduseitwhenthereisabsolutelynopointforyourlistenertolisten
onglobal(system-wide)broadcastsandwhenyourbroadcastdoesnotneedtotargetanythingoutsideyourapp.
广播
LocalBroadcastManager
监听蓝牙状态
【问题】
广播的用法;
使用LocalBroadcastManager注册蓝牙广播,接收不到消息;
【解决方案】
在自定义广播的时候才使用LocalBroadcastManager,并且需求是:广播只在本APP中有效;
不要尝试通过LocalBroadcastManager操作(注册,取消注册,发送)系统的广播;
【权限】
<uses-permissionandroid:name="android.permission.BLUETOOTH"/>
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
【注册】
mContext.registerReceiver(mReceiver,makeFilter());
【注销】
mContext.unregisterReceiver(mReceiver);
【代码】
privateIntentFiltermakeFilter(){
IntentFilterfilter=newIntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
returnfilter;
}
privateBroadcastReceivermReceiver=newBroadcastReceiver(){
@Override
publicvoidonReceive(Contextcontext,Intentintent){
LogUtil.e(TAG,"onReceive---------");
switch(intent.getAction()){
caseBluetoothAdapter.ACTION_STATE_CHANGED:
intblueState=intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,0);
switch(blueState){
caseBluetoothAdapter.STATE_TURNING_ON:
LogUtil.e("onReceive---------STATE_TURNING_ON");
break;
caseBluetoothAdapter.STATE_ON:
LogUtil.e("onReceive---------STATE_ON");
break;
caseBluetoothAdapter.STATE_TURNING_OFF:
LogUtil.e("onReceive---------STATE_TURNING_OFF");
BleUtil.toReset(mContext);
break;
caseBluetoothAdapter.STATE_OFF:
LogUtil.e("onReceive---------STATE_OFF");
BleUtil.toReset(mContext);
break;
}
break;
}
}
};
【参考资料】
LocalBroadcastManagervsContext.registerReceiver(),
Context.sendBroadcast(Intent),andContext.unregisterReceiver()aretheysame?
LocalBroadcastManagerisasitsnamesays,animplementationofthebroadcastmethodsthatareonlyavailabletoyourapp.Thishassomebenefits,withthebiggestbeingsafety,onelessholeto
watchoutfor.Intermsofimplementation,thereareafewthingstokeepinmind:
ThisclassisfromtheAndroidSupportLibrary
Themethodcallshavetobeprefacedwith
LocalBroadcastManager.getInstance([CONTEXT])where
[CONTEXT]is
asubclassoftheContextclass,suchasActivity.
Whenyouusethisclass,itispurelyforyourapp.Usingittoregisterreceiversandmakebroadcaststhataresystemwidewillfail.
SothisclassisnotthesameasContext,itissimplyaveryspecific,app-onlyimplementationofContext'sreceiver/broadcastmethods.Youshoulduseitwhenthereisabsolutelynopointforyourlistenertolisten
onglobal(system-wide)broadcastsandwhenyourbroadcastdoesnotneedtotargetanythingoutsideyourapp.
相关文章推荐
- 【Android】使用ProgressBar遇到的问题
- android xml点击交互
- 【Android】沉浸式状态栏的两种实现方式
- Android屏幕适配
- android 成长日记 6.ListView详解
- android圆形图片,圆形背景文字的CircleTextImageView开源组件
- 【Android】图片资源的加载、简单处理
- 【Android】多媒体编程——MediaPlayer音频播放
- 【Android】Intent过滤器
- 【Android】BroadcastReceiver的生命周期
- 【Android】Activity启动模式
- Android下拉刷新汽车加速仪表盘效果
- Android Studio 常见问题之Rendering Problems
- Drawable Resources
- Android笔记之Activity
- Android Service生命周期 Service里面的onStartCommand()方法详解
- GitHub 优秀的 Android 开源项目
- Android 设备兼容
- Android实现版本更新提示
- Android 图片三级缓存机制工具类封装