BluetoothAdapterに加えられた状態の変化を検出する?
2023-09-04 23:39:58
質問
BTのON/OFFに使うボタンがついたアプリがあります。そこに次のコードがあります。
public void buttonFlip(View view) {
flipBT();
buttonText(view);
}
public void buttonText(View view) {
Button buttonText = (Button) findViewById(R.id.button1);
if (mBluetoothAdapter.isEnabled() || (mBluetoothAdapter.a)) {
buttonText.setText(R.string.bluetooth_on);
} else {
buttonText.setText(R.string.bluetooth_off);
}
}
private void flipBT() {
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable();
} else {
mBluetoothAdapter.enable();
}
}
私はボタンの Flip を呼び出し、BT の状態を反転させ、次に ButtonText を呼び出し、UI を更新しています。しかし、私が抱えている問題は、BT がオンになるまでに数秒かかり、その数秒の間、BT 状態は有効になっていないため、2 秒後にオンになるとしても、私のボタンは Bluetooth オフと表示されることです。
私は
STATE_CONNECTING
定数はBluetoothAdapterのアンドロイドのドキュメントにありましたが 初心者の私には使い方がわかりません。
そこで、2つ質問させてください。
- UI 要素 (ボタンや画像など) を BT 状態に動的に結び付けて、BT 状態が変化したときにボタンも変化するようにする方法はありますか。
- そうでなければ、ボタンを押して正しい状態を取得したいと思います (2秒後にオンになるので、接続しているだけであっても、BT オンを示すようにしたいと思います)。これを行うにはどうしたらよいですか?
どのように解決するのですか?
を登録することになります。
BroadcastReceiver
の状態が変化するのを待つために
BluetoothAdapter
:
のプライベートインスタンス変数として
Activity
(または別のクラスファイル...どちらか好きな方)の中でプライベートなインスタンス変数として使用します。
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
BluetoothAdapter.ERROR);
switch (state) {
case BluetoothAdapter.STATE_OFF:
setButtonText("Bluetooth off");
break;
case BluetoothAdapter.STATE_TURNING_OFF:
setButtonText("Turning Bluetooth off...");
break;
case BluetoothAdapter.STATE_ON:
setButtonText("Bluetooth on");
break;
case BluetoothAdapter.STATE_TURNING_ON:
setButtonText("Turning Bluetooth on...");
break;
}
}
}
};
なお、これは
Activity
はメソッドを実装しています。
setButtonText(String text)
を変更する
Button
のテキストをそれに応じて変更します。
そして、あなたの
Activity
を登録したり解除したりします。
BroadcastReceiver
を次のようにします。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* ... */
// Register for broadcasts on BluetoothAdapter state change
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mReceiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
/* ... */
// Unregister broadcast listeners
unregisterReceiver(mReceiver);
}
関連
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
linux ant Resolve error: main class not found or couldn't be loaded org.apache.tools.ant.launcher.
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
javaの非静的メソッドを静的に参照することができない
-
Uncaught ReferenceError: は定義されていません。
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
無効なメソッド宣言
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション