Android 11(API 30)蓝牙扫描权限获取失败求助
Android 11(API 30)蓝牙扫描权限获取失败求助
我现在在Android 11(API 30)的手机上尝试实现蓝牙设备发现功能(扫描附近的蓝牙设备),但有几个权限始终被拒绝。我知道这个问题已经被问过很多次了,也查阅了大量相关回复并尝试了对应的代码,但都没能解决问题。
我做了一个测试应用,目前只能成功获取BLUETOOTH、BLUETOOTH_ADMIN和ACCESS_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




