Request BLUETOOTH_SCAN/CONNECT at onAttach on API 31+
Activity.requestPermissions is unreliable from non-UI threads / late timing on Android 17 (createDeviceContext garbage device id); the fragment's onAttach request path works. Skip the legacy location request on API 31+ (BLUETOOTH_SCAN is neverForLocation). Rebuild Ble.jar.
This commit is contained in:
parent
876ea68622
commit
99598c14fe
|
|
@ -35,6 +35,7 @@ public class BlessedConnect extends Fragment {
|
|||
|
||||
final int PERMISSION_REQUEST = 1;
|
||||
final int REQUEST_ENABLE_BT = 2;
|
||||
final int PERMISSION_REQUEST_BLE = 3;
|
||||
|
||||
public BlessedConnect() {
|
||||
Log.d("gio", "BlessedConnect()");
|
||||
|
|
@ -63,7 +64,15 @@ public class BlessedConnect extends Fragment {
|
|||
super.onAttach(ctx);
|
||||
Log.d("gio", "BlessedConnect: onAttach()");
|
||||
ctx.registerReceiver(receiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
|
||||
if (ctx.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 31) {
|
||||
// BLE on Android 12+ needs the BLUETOOTH_SCAN/CONNECT runtime
|
||||
// permissions. BLUETOOTH_SCAN is declared with
|
||||
// usesPermissionFlags="neverForLocation", so no location
|
||||
// permission is required for scanning.
|
||||
requestPermissions(new String[]{
|
||||
"android.permission.BLUETOOTH_SCAN",
|
||||
"android.permission.BLUETOOTH_CONNECT"}, PERMISSION_REQUEST_BLE);
|
||||
} else if (ctx.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST);
|
||||
}
|
||||
central = new BluetoothCentral(ctx, centralCallback, null);
|
||||
|
|
@ -268,7 +277,7 @@ public class BlessedConnect extends Fragment {
|
|||
@Override
|
||||
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
|
||||
Log.d("gio", "BlessedConnect: onRequestPermissionsResult");
|
||||
if (requestCode == PERMISSION_REQUEST) {
|
||||
if (requestCode == PERMISSION_REQUEST || requestCode == PERMISSION_REQUEST_BLE) {
|
||||
boolean granted = true;
|
||||
for (int x : grantResults) {
|
||||
if (x == PackageManager.PERMISSION_DENIED) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user