6

開発者ガイドによると、次のように Bluetooth を有効にするように要求できます。

http://developer.android.com/guide/topics/connectivity/bluetooth.html#SettingUp

if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

私の実装では、これによりリクエストが適切に作成され、ユーザーにリクエストダイアログが表示されます。

私の問題は、ダイアログが表示される前に結果が得られるように、onActivityResult()がすぐに呼び出されることです。返されたrequestCodeは 1 つのセット (この場合は 9001) と一致し、resultCodeは常に 0 (Activity.RESULT_CANCELED) です。

これは 4.3 のバグだと思いますが、残念ながら私は 4.3 デバイスしか持っていません。説明とソースを読むと、ユーザーがダイアログを操作するまでonActivityResult()を呼び出すべきではないように見えるので、誰かがこれがバグであることを確認したり、私が間違っていることを説明したりできますか?

以下でテストされ、同じ結果が得られました。

  • 新しいネクサス 7
  • ネクサス7
  • ネクサス4
  • ギャラクシー ネクサス
4

2 に答える 2

6

4.1.1 でテストすると、ガイドが明らかに間違っているように見えます。このインテントでは startActivityForResult の呼び出しが期待どおりに機能せず、ユーザーがダイアログを操作する機会が与えられる前に onActivityResult が呼び出されます。

そのため、ユーザーがいつ Bluetooth を有効にしたかを知る確実な方法は、関連するACTION_STATE_CHANGEDイベントをリッスンすることです。

于 2013-08-08T23:54:16.500 に答える