mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-17 22:11:35 +02:00
check for new Bluetooth permissions in Android version >= 31, see #779
This commit is contained in:
@@ -2,12 +2,12 @@ apply plugin: 'com.android.application'
|
||||
apply plugin: "androidx.navigation.safeargs"
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
compileSdkVersion 31
|
||||
defaultConfig {
|
||||
applicationId "com.health.openscale"
|
||||
testApplicationId "com.health.openscale.test"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29 // TODO target higher 31 needs different Bluetooth permissions, see https://developer.android.com/guide/topics/connectivity/bluetooth/permissions
|
||||
targetSdkVersion 31
|
||||
versionCode 56
|
||||
versionName "2.4.1"
|
||||
|
||||
@@ -132,7 +132,7 @@ android {
|
||||
dependencies {
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
||||
|
||||
implementation 'com.google.android.material:material:1.5.0-alpha02'
|
||||
implementation 'com.google.android.material:material:1.5.0-alpha05'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.3.1'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
||||
@@ -148,7 +148,7 @@ dependencies {
|
||||
// Simple CSV
|
||||
implementation 'com.j256.simplecsv:simplecsv:2.6'
|
||||
// Blessed Android
|
||||
implementation 'com.github.weliem:blessed-android:2.0.11'
|
||||
implementation 'com.github.weliem:blessed-android:2.1.2'
|
||||
// CustomActivityOnCrash
|
||||
implementation 'cat.ereza:customactivityoncrash:2.3.0'
|
||||
// AppIntro
|
||||
|
@@ -2,12 +2,14 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.health.openscale" >
|
||||
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
|
||||
<!-- Permission to allow read of data from the database through a ContentProvider.
|
||||
Marked "dangerous" so that explicit user approval is required to read this data, not
|
||||
|
@@ -533,9 +533,10 @@ public abstract class BluetoothCommunication {
|
||||
// Otherwise the connection almost never succeeds.
|
||||
LocationManager locationManager = (LocationManager)context.getSystemService(LOCATION_SERVICE);
|
||||
|
||||
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
|
||||
== PackageManager.PERMISSION_GRANTED && (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|
||||
|| locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
|
||||
if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) ||
|
||||
(ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED ) &&
|
||||
(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
|
||||
(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)))
|
||||
) {
|
||||
Timber.d("Do LE scan before connecting to device");
|
||||
central.scanForPeripheralsWithAddresses(new String[]{macAddress});
|
||||
|
@@ -391,8 +391,16 @@ public class BluetoothSettingsFragment extends Fragment {
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
||||
switch (requestCode) {
|
||||
case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_BLUETOOTH: {
|
||||
boolean allGranted = true;
|
||||
for (int result : grantResults) {
|
||||
if (result != PackageManager.PERMISSION_GRANTED) {
|
||||
allGranted = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (allGranted) {
|
||||
if (PermissionHelper.requestLocationServicePermission(this)) {
|
||||
startBluetoothDiscovery();
|
||||
}
|
||||
|
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.health.openscale.gui.utils;
|
||||
|
||||
import static android.content.Context.LOCATION_SERVICE;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
@@ -33,10 +35,8 @@ import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.health.openscale.R;
|
||||
|
||||
import static android.content.Context.LOCATION_SERVICE;
|
||||
|
||||
public class PermissionHelper {
|
||||
public final static int PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
|
||||
public final static int PERMISSIONS_REQUEST_ACCESS_BLUETOOTH = 1;
|
||||
public final static int PERMISSIONS_REQUEST_ACCESS_READ_STORAGE = 2;
|
||||
public final static int PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE = 3;
|
||||
|
||||
@@ -62,6 +62,21 @@ public class PermissionHelper {
|
||||
return false;
|
||||
}
|
||||
|
||||
int targetSdkVersion = fragment.getActivity().getApplicationInfo().targetSdkVersion;
|
||||
|
||||
String[] requiredPermissions;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && targetSdkVersion >= Build.VERSION_CODES.S) {
|
||||
requiredPermissions = new String[]{Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT};
|
||||
fragment.requestPermissions(requiredPermissions, PERMISSIONS_REQUEST_ACCESS_BLUETOOTH);
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && targetSdkVersion >= Build.VERSION_CODES.Q) {
|
||||
return requestLocationPermission(fragment, new String[]{Manifest.permission.ACCESS_FINE_LOCATION});
|
||||
} else return requestLocationPermission(fragment, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean requestLocationPermission(final Fragment fragment, String[] requiredPermissions) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (fragment.getContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getActivity());
|
||||
@@ -72,7 +87,7 @@ public class PermissionHelper {
|
||||
.setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
dialog.dismiss();
|
||||
fragment.requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
|
||||
fragment.requestPermissions(requiredPermissions, PERMISSIONS_REQUEST_ACCESS_BLUETOOTH);
|
||||
}
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user