Die Methode startActivityForResult() ist "deprecated" und stattdessen sollten Contrats verwendet werden. Es gibt vordefinierte Contracts für verschiedene Fälle, aber nicht für alles, nicht für Bluetooth. Mit eigenen Contracts können elegante Lösungen implementiert werden. Zum Starten von eigenen Activities findet sich eine Anleitung bei https://wajahatkarim.com/2020/…lts-api-onactivityresult/ und es funktioniert.
Aber meine Lösung um Bluetooth zu aktivieren funktioniert nicht. Ich wäre dankbar, wenn jemand den entscheidenden Tipp geben könnte, wie der Contract aussehen muss, um Bluetooth in "createIntent" zu aktivieren.
--------------------------------------------------------------------------
...
private val myLauncher = registerForActivityResult(MyActivityContract()) {
result -> activityResultCallback(result) }
...
if ((state == BluetoothState.Disabled) && (Build.VERSION.SDK_INT < 31
ActivityCompat.checkSelfPermission(this,
Manifest.permission.BLUETOOTH_CONNECT) == PERMISSION_GRANTED)) {
// val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
// startActivityForResult(enableBtIntent, REQUEST_ENABLE_BLUETOOTH)
myLauncher.launch(BluetoothAdapter.ACTION_REQUEST_ENABLE) // ersetzt auskommentierte Zeilen
}
...
private fun activityResultCallback(result: Boolean) {
// result auswerten, ersetzt onActivityResult()
}
...
-------------- MyActivityContract.kt----------------------------------------
package com.example.bluetoothdemo1
import android.app.Activity
import android.bluetooth.BluetoothAdapter
import android.content.Context
import android.content.Intent
import androidx.activity.result.contract.ActivityResultContract
class MyActivityContract : ActivityResultContract<String, Boolean>() {
override fun createIntent(context: Context, input: String): Intent {
val intent = Intent(context, BluetoothAdapter::class.java) // <- funktoniert so nicht!!!
intent.putParcelableArrayListExtra(input, null) // warum?
return intent
}
override fun parseResult(resultCode: Int, intent: Intent?): Boolean {
return (resultCode == Activity.RESULT_OK)
}
}
--------------------------------------------------------------------------------