android-BluetoothAdapter#ACTION_REQUEST_ENABLE_と_resultLauncher

 

android アプリ作成について学習しているのですが、

bluetoothの機能を実装しようとする際、


アプリ内でBluetoothAdapterが有効になっていないときに

activityresult launcherを別の箇所に

適切に記述してから


if ( !mBluetoothAdapter.isEnabled() ) {


val enableBtIntent : Intent

 = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)

 

// startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)


// val intent = Intent(this, ActivityB::class.java)     

//resultLauncher.launch(intent)


resultLauncher.launch( enableBtIntent )

       


}


のようなコードを実行すると、


この場合はシステムは

ユーザーが普段使っているような、


設定画面のbluetoothのセクションを表示して


有効にするかどうかのアクションを促すのでしょうか?





あなたのコードで使用している

`BluetoothAdapter.ACTION_REQUEST_ENABLE` を含むインテントを 

`ActivityResultLauncher` で起動した場合、


Android システムは 

**Bluetooth を有効にするためのダイアログ** を表示します。


これは、ユーザーにアプリ内で直接 Bluetooth を有効にする選択肢を提供するための

標準的な方法です。


具体的には、

システムが Bluetooth 設定画面そのものを表示するわけではなく、

以下のようなダイアログが表示されます:



- 「Bluetooth を有効にしますか?」という内容のポップアップ。


- ユーザーには「キャンセル」と「有効にする」の2つの選択肢が提示されます。



### 重要なポイント


1. **設定画面の直接表示とは異なる**  


   このダイアログは、ユーザーが Bluetooth 設定を開かずに

   直接オンにできる便利な方法です。



2. **設定画面を表示するには別のアプローチが必要** 

 

   Bluetooth 設定画面に直接移動させたい場合は、

   以下のインテントを使用します:

   

   ```kotlin

   

   val intent

   = Intent(Settings.ACTION_BLUETOOTH_SETTINGS)

   

   startActivity(intent)

   

   ```

   

   これにより、Bluetooth 設定セクションが開きますが、

   ユーザーはそこで手動で有効にする必要があります。



3. **ActivityResultLauncher の使用方法**


   `startActivityForResult` は非推奨になったため、

   代わりに `ActivityResultLauncher` を使用します。

   

   以下のように設定できます:


   ```kotlin

   

   private val enableBluetoothLauncher =

       registerForActivityResult(

   ActivityResultContracts.StartActivityForResult()) { 

   result ->

   

           if (result.resultCode == Activity.RESULT_OK) {

   

               // ユーザーが Bluetooth を有効にした場合の処理

               Log.d("Bluetooth",

   "Bluetooth has been enabled")

           } else {

   

               // ユーザーが Bluetooth を有効にしなかった場合の処理

               Log.d("Bluetooth",

   "Bluetooth enabling was canceled")

           }

   

       }


   fun checkBluetooth() {

   

       if (!mBluetoothAdapter.isEnabled) {

   

           val enableBtIntent

   = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)

           enableBluetoothLauncher.launch(enableBtIntent)

   

       }

   }

   

   ```


このコードを使用すると、Bluetooth を有効化するダイアログを表示し、

ユーザーのアクション結果を受け取ることができます。



### 設定画面を表示する場合の使い分け


- アプリ内でダイアログを使って有効化を促したい場合:

`ACTION_REQUEST_ENABLE`



- Bluetooth 設定画面に直接移動させたい場合:

`ACTION_BLUETOOTH_SETTINGS`



状況に応じて使い分けるのが良いでしょう。


コメント