您的位置:首页 > 移动开发 > Android开发

【Android】监听蓝牙状态变化

2016-02-24 06:48 435 查看
【关键词】

广播
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: