android studio kotlin - 蓝牙“ACTION REQUEST ENABLE”不起作用

Mat*_*sil 7 android bluetooth kotlin android-studio

启动我的程序后,单击按钮,应用程序崩溃。当我尝试其他开发人员、谷歌的教程时……它并没有解决问题。我忽略了 startActivityForResult() 已弃用,我想要求用户打开蓝牙 - 仅此而已。

问题出在 Android 12 的设备上。

这是我从清单文件中获得的许可:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Run Code Online (Sandbox Code Playgroud)

这是我来自 MainActivity.kt 的代码

package com.example.piratsilnic

import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val BTadapter = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
        BTadapter.getAdapter()
        var REQUEST_ENABLE_BT = 1

        val sparovatButton = findViewById<Button>(R.id.sparovatButton)
        sparovatButton.setOnClickListener{
            if (BTadapter != null) {
                if (BTadapter.adapter?.isEnabled == false) {
                    val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
                    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
                }
                if (BTadapter.adapter.isEnabled) {
                    Toast.makeText(this, "bluetooth on", Toast.LENGTH_LONG).show()
                }
            } else {
                Toast.makeText(this, "Device doesnt support bluetooth", Toast.LENGTH_LONG).show()
            }
        }  
    }

}
Run Code Online (Sandbox Code Playgroud)

我有点迷失了...谢谢你的帮助...

Fil*_*ski 7

您可以使用较新的registerForActivityResult() 要了解更多信息,developers.android.com 上有一个很好的指南:从活动中获取结果

首先,您需要注册您的回调:

    val registerForResult = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val intent = result.data
            // Handle the Intent
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后,在 onClickListener 中启动它。

if (BTadapter.adapter?.isEnabled == false) {
    val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
    regiterForResult.launch(enableBtIntent)
}
Run Code Online (Sandbox Code Playgroud)