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 PERMISSION_REQUEST = 1;
|
||||||
final int REQUEST_ENABLE_BT = 2;
|
final int REQUEST_ENABLE_BT = 2;
|
||||||
|
final int PERMISSION_REQUEST_BLE = 3;
|
||||||
|
|
||||||
public BlessedConnect() {
|
public BlessedConnect() {
|
||||||
Log.d("gio", "BlessedConnect()");
|
Log.d("gio", "BlessedConnect()");
|
||||||
|
|
@ -63,7 +64,15 @@ public class BlessedConnect extends Fragment {
|
||||||
super.onAttach(ctx);
|
super.onAttach(ctx);
|
||||||
Log.d("gio", "BlessedConnect: onAttach()");
|
Log.d("gio", "BlessedConnect: onAttach()");
|
||||||
ctx.registerReceiver(receiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
|
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);
|
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST);
|
||||||
}
|
}
|
||||||
central = new BluetoothCentral(ctx, centralCallback, null);
|
central = new BluetoothCentral(ctx, centralCallback, null);
|
||||||
|
|
@ -268,7 +277,7 @@ public class BlessedConnect extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
|
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
|
||||||
Log.d("gio", "BlessedConnect: onRequestPermissionsResult");
|
Log.d("gio", "BlessedConnect: onRequestPermissionsResult");
|
||||||
if (requestCode == PERMISSION_REQUEST) {
|
if (requestCode == PERMISSION_REQUEST || requestCode == PERMISSION_REQUEST_BLE) {
|
||||||
boolean granted = true;
|
boolean granted = true;
|
||||||
for (int x : grantResults) {
|
for (int x : grantResults) {
|
||||||
if (x == PackageManager.PERMISSION_DENIED) {
|
if (x == PackageManager.PERMISSION_DENIED) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user