You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android 11(API 30)蓝牙扫描权限获取失败求助

Android 11(API 30)蓝牙扫描权限获取失败求助

我现在在Android 11(API 30)的手机上尝试实现蓝牙设备发现功能(扫描附近的蓝牙设备),但有几个权限始终被拒绝。我知道这个问题已经被问过很多次了,也查阅了大量相关回复并尝试了对应的代码,但都没能解决问题。

我做了一个测试应用,目前只能成功获取BLUETOOTHBLUETOOTH_ADMINACCESS_COARSE_LOCATION这三个权限,其他权限都拿不到,这直接导致我无法执行蓝牙扫描操作。希望有大佬能给我一些建议,告诉我该如何获取剩下的必要权限。

我的Manifest文件内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.TestThreads" tools:targetApi="31">
        <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.TestThreads">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

MainActivity代码(点击按钮触发权限申请,代码存在截断)

public class MainActivity extends AppCompatActivity {
    private ActivityMainBinding binding;
    BluetoothAdapter btadapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(R.layout.activity_main);

        String[] permissions = {
                "Manifest.permission.BLUETOOTH",
                "Manifest.permission.BLUETOOTH_ADMIN",
                "Manifest.permission.BLUETOOTH_CONNECT",
                "Manifest.permission.BLUETOOTH_SCAN",
                "Manifest.permission.ACCESS_FINE_LOCATION",
                "Manifest.permission.ACCESS_COARSE_LOCATION"
        };

        ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == this.RESULT_OK) {
                        Log.e("onCreate", "Activity result=OK");
                        btadapter = BluetoothAdapter.getDefaultAdapter();
                        if (btadapter == null) {
                            Log.e("onCreate", "No BluetoothAdapter available");
                        }

                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED)
                            Log.e("onCreate", "BLUETOOTH permission not granted");
                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_ADMIN) != PackageManager.PERMISSION_GRANTED)
                            Log.e("onCreate", "BLUETOOTH_ADMIN permission not granted");
                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED)
                            Log.e("onCreate", "BLUETOOTH_SCAN permission not granted");
                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED)
                            Log.e("onCreate", "BLUETOOTH_CONNECT permission not granted");
                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                            Log.e("onCreate", "ACCESS_COARSE_LOCATION permission not granted");
                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                            Log.e("onCreate", "ACCESS_FINE_LOCATION permission not granted");

                        btadapter.startDiscovery();
                    }
                });

        List<String> permissionsToRequest = new ArrayList<>();
        Button button1 = (Button) findViewById(R.id.button_start);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public // 此处代码存在截断
        });
    }
}

内容来源于stack exchange

火山引擎 最新活动