我的应用程序拥有一个带有特定UUID
的开放式蓝牙服务器套接字,以便其他设备连接和传输文件。关于BroadcastReceiver
,我有点困惑。
在扩展Activity
的课程中,我想检查蓝牙适配器的状态。但我的BroadcastReceiver从未被触发过。我试着用这种方式使用BroadcastReceiver:
public class MainClass extends Activity {
public void onCreate(Bundle b) {
super.onCreate(b);
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mReceiver, filter);
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
Log.w("BroadcastReceiver: ", "Inside!");
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
switch (state) {
case BluetoothAdapter.STATE_OFF:
Log.d("Bluetooth Receiver", "State-off");
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
break;
case BluetoothAdapter.STATE_TURNING_OFF:
Log.d("Bluetooth Receiver", "State turning off");
break;
case BluetoothAdapter.STATE_ON:
Log.d("Bluetooth Receiver", "State-on");
btCom = new BluetoothCommunicator(MainClass.this, lastCases, nist);
btCom.startServer();
break;
case BluetoothAdapter.STATE_TURNING_ON:
Log.d("Bluetooth Receiver", "State turning on");
break;
}
}
}
};
}
我对州有疑问:
btCom.startServer()
我还读到我需要在我的Manifest文件中注册广播接收器,如果BroadcastReceiver在扩展Activity的类中,我怎么能这样做呢?如果我将这个BroadcastReceiver放在一个单独的类中,我就会这样做
说我的包名是com.workbench
并且我的班级名称是BluetoothReceiver
Manifest看起来像这样:
<receiver android:name="com.workbench.BluetoothReceiver"></receiver>
答案 0 :(得分:0)
当蓝牙适配器的状态发生变化时,会发送广播操作BluetoothAdapter.ACTION_STATE_CHANGED
。只有在适配器的状态发生变化时才会看到这一点。
您可以致电BluetoothAdapter.isEnabled()
来查看蓝牙适配器的当前状态。
如果您希望在应用程序未运行时获取广播BroadcastReceiver
,则只需在清单中注册Intent
即可。您实现BroadcastReceiver
(作为匿名类)的方式无法在清单中注册它。