4

UUID私のアプリケーションは、別のデバイスが接続してファイルを転送するために、特定の で開いている Bluetooth サーバーソケットを保持しています。に関しては少し混乱していBroadcastReceiverます。

を拡張するクラスでActivity、Bluetooth アダプターの状態を確認したいと考えています。しかし、私の 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は、実行時に Bluetooth がオンになっている場合にのみ発生しますか? または、Bluetooth をオンにしてアプリケーションを起動すると、このイベントが発生しますか? btCom.startServer()Bluetoothがオンになっている場合にメソッドを開始したい原因

また、マニフェスト ファイルにブロードキャスト レシーバーを登録する必要があることも読みました。この BroadcastReceiver が別のクラスにある場合、次のようにします

たとえば、私のパッケージ名がcom.workbench、私のクラス名がBluetoothReceiver

マニフェストは次のようになります。

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

1 に答える 1

0

ブロードキャスト アクションBluetoothAdapter.ACTION_STATE_CHANGEDは、Bluetooth アダプターの状態が変化したときに送信されます。これは、アダプターの状態が変更された場合にのみ表示されます。

を呼び出して、Bluetooth アダプタの現在の状態を確認できますBluetoothAdapter.isEnabled()

アプリケーションが実行されていないときにBroadcastReceiverブロードキャストを取得する場合にのみ、マニフェストに を登録する必要があります。(匿名クラスとして)Intentを実装した方法では、マニフェストに登録することはできません。BroadcastReceiver

于 2013-12-30T18:08:37.053 に答える