蓝牙服务器和BroadCastReceiver

时间:2012-11-23 12:51:54

标签: android

我的应用程序拥有一个带有特定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;
                }
            }
        }
    };

}

我对州有疑问:

  • 状态 STATE_ON 是否仅在运行时打开蓝牙时启动?或者我可以在启用蓝牙的情况下启动我的应用程序,此事件将被解雇吗?因为如果打开蓝牙,我想启动方法btCom.startServer()

我还读到我需要在我的Manifest文件中注册广播接收器,如果BroadcastReceiver在扩展Activity的类中,我怎么能这样做呢?如果我将这个BroadcastReceiver放在一个单独的类中,我就会这样做

说我的包名是com.workbench并且我的班级名称是BluetoothReceiver

Manifest看起来像这样:

 <receiver android:name="com.workbench.BluetoothReceiver"></receiver>

1 个答案:

答案 0 :(得分:0)

当蓝牙适配器的状态发生变化时,会发送广播操作BluetoothAdapter.ACTION_STATE_CHANGED。只有在适配器的状态发生变化时才会看到这一点。

您可以致电BluetoothAdapter.isEnabled()来查看蓝牙适配器的当前状态。

如果您希望在应用程序未运行时获取广播BroadcastReceiver,则只需在清单中注册Intent即可。您实现BroadcastReceiver(作为匿名类)的方式无法在清单中注册它。

相关问题