Как получить разрешения Bluetooth для Android 11?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить разрешения Bluetooth для Android 11?

Сообщение Anonymous »

Я пытаюсь сделать Bluetooth Discovery (сканирование на ближайшие устройства) на телефоне Android 11 (API 30), но некоторые разрешения постоянно отрицаются.
Я знаю, что этот вопрос много раз задавался, и я читал много ответов и попробовал код безрезультатно. Другие разрешения, поэтому он не может сделать сканирование. Я надеюсь, что кто -то сможет предложить, как получить другие разрешения. < /P>
Вот манифест: < /p>




















< /code>
В нем есть только одна кнопка, поэтому я не включаю ее здесь.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 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 permissionsToRequest = new ArrayList();

Button button1 = (Button) findViewById(R.id.button_start);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
toneGen1.startTone(ToneGenerator.TONE_PROP_BEEP, 150);

// Filter out the permissions that are not yet granted
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsToRequest.add(permission);
}
}
String[] perms = permissionsToRequest.toArray(new String[0]);
int numPerm = permissionsToRequest.size();
if (numPerm > 0) {
Log.e("onCreate", "Requesting " + numPerm + " permissions");
ActivityCompat.requestPermissions(MainActivity.this, perms, 1);
}

Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
activityResultLauncher.launch(intent);
}
});

BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
toneGen1.startTone(ToneGenerator.TONE_PROP_BEEP, 150);

//Finding devices
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
//Prevent red marks in the code editor
}

String str = device.getName(); //Manifest.permission.BLUETOOTH_SCAN
Log.e("BroadcastReceiver", "found: " + str);
}
};
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver, filter);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == 1){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
Log.e("Permissions", "Permission Granted");
}
else {
Log.e("Permissions","Permission Denied");
}
}
}
private static final int REQUEST_ENABLE_BT = 0;
private static final int REQUEST_DISCOVER_BT = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode){
case REQUEST_ENABLE_BT:
if (resultCode == RESULT_OK) {
// Bluetooth is on
Log.e("onActivityResult", "Bluetooth is on");
}
else {
Log.e("onActivityResult", "Bluetooth is not on");
}

break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
< /code>
Вот соответствующий вывод Logcat (мои записи помечены «e»): < /p>
2025-06-25 22:52:08.906 22738-22738 AudioTrack com.xxx.testthreads I createTrack_l(0): AUDIO_OUTPUT_FLAG_FAST successful; frameCount 960 -> 960
2025-06-25 22:52:08.908 22738-22738 AudioTrack com.xxx.testthreads D setVolume(1.000000, 1.000000) pid : 22738
2025-06-25 22:52:08.915 22738-22738 onCreate com.xxx.testthreads E Requesting 6 permissions
2025-06-25 22:52:09.007 22738-26846 AudioTrack com.xxx.testthreads D stop(451): called with 2112 frames delivered
2025-06-25 22:52:09.023 22738-22738 ViewRootIm...nActivity] com.xxx.testthreads I MSG_WINDOW_FOCUS_CHANGED 0 1
2025-06-25 22:52:09.115 22738-22738 onCreate com.xxx.testthreads E Activity result=OK
2025-06-25 22:52:09.125 22738-22738 onCreate com.xxx.testthreads E BLUETOOTH_SCAN permission not granted
2025-06-25 22:52:09.126 22738-22738 onCreate com.xxx.testthreads E BLUETOOTH_CONNECT permission not granted
2025-06-25 22:52:09.127 22738-22738 onCreate com.xxx.testthreads E ACCESS_FINE_LOCATION permission not granted
2025-06-25 22:52:09.128 22738-22738 BluetoothAdapter com.xxx.testthreads I startDiscovery
2025-06-25 22:52:09.133 22738-22738 Permissions com.xxx.testthreads E Permission Denied
2025-06-25 22:52:09.134 22738-22738 ViewRootIm...nActivity] com.xxx.testthreads I stopped(false) old=false
< /code>
Я установил коммерческое приложение Bluetooth на телефон и протестировал его, поэтому я знаю, что Bluetooth Discovery работает на этом телефоне.
Спасибо за то, что прочитали это далеко! < /p>

Подробнее здесь: https://stackoverflow.com/questions/796 ... android-11
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»