Я пытаюсь сделать 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
Как получить разрешения Bluetooth для Android 11? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1751289903
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>
Подробнее здесь: [url]https://stackoverflow.com/questions/79679761/how-do-you-get-bluetooth-permissions-for-android-11[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия