mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-18 14:31:23 +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"
|
apply plugin: "androidx.navigation.safeargs"
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 31
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.health.openscale"
|
applicationId "com.health.openscale"
|
||||||
testApplicationId "com.health.openscale.test"
|
testApplicationId "com.health.openscale.test"
|
||||||
minSdkVersion 21
|
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
|
versionCode 56
|
||||||
versionName "2.4.1"
|
versionName "2.4.1"
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ android {
|
|||||||
dependencies {
|
dependencies {
|
||||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
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.legacy:legacy-support-v4:1.0.0'
|
||||||
implementation 'androidx.appcompat:appcompat:1.3.1'
|
implementation 'androidx.appcompat:appcompat:1.3.1'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
||||||
@@ -148,7 +148,7 @@ dependencies {
|
|||||||
// Simple CSV
|
// Simple CSV
|
||||||
implementation 'com.j256.simplecsv:simplecsv:2.6'
|
implementation 'com.j256.simplecsv:simplecsv:2.6'
|
||||||
// Blessed Android
|
// Blessed Android
|
||||||
implementation 'com.github.weliem:blessed-android:2.0.11'
|
implementation 'com.github.weliem:blessed-android:2.1.2'
|
||||||
// CustomActivityOnCrash
|
// CustomActivityOnCrash
|
||||||
implementation 'cat.ereza:customactivityoncrash:2.3.0'
|
implementation 'cat.ereza:customactivityoncrash:2.3.0'
|
||||||
// AppIntro
|
// AppIntro
|
||||||
|
@@ -2,12 +2,14 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.health.openscale" >
|
package="com.health.openscale" >
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH"/>
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
|
<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.WRITE_EXTERNAL_STORAGE"/>
|
||||||
<uses-permission android:name="android.permission.READ_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.RECEIVE_BOOT_COMPLETED"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
|
||||||
|
|
||||||
<!-- Permission to allow read of data from the database through a ContentProvider.
|
<!-- 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
|
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.
|
// Otherwise the connection almost never succeeds.
|
||||||
LocationManager locationManager = (LocationManager)context.getSystemService(LOCATION_SERVICE);
|
LocationManager locationManager = (LocationManager)context.getSystemService(LOCATION_SERVICE);
|
||||||
|
|
||||||
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
|
if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) ||
|
||||||
== PackageManager.PERMISSION_GRANTED && (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|
(ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED ) &&
|
||||||
|| locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
|
(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
|
||||||
|
(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)))
|
||||||
) {
|
) {
|
||||||
Timber.d("Do LE scan before connecting to device");
|
Timber.d("Do LE scan before connecting to device");
|
||||||
central.scanForPeripheralsWithAddresses(new String[]{macAddress});
|
central.scanForPeripheralsWithAddresses(new String[]{macAddress});
|
||||||
|
@@ -391,8 +391,16 @@ public class BluetoothSettingsFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
|
case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_BLUETOOTH: {
|
||||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
boolean allGranted = true;
|
||||||
|
for (int result : grantResults) {
|
||||||
|
if (result != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
allGranted = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allGranted) {
|
||||||
if (PermissionHelper.requestLocationServicePermission(this)) {
|
if (PermissionHelper.requestLocationServicePermission(this)) {
|
||||||
startBluetoothDiscovery();
|
startBluetoothDiscovery();
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.health.openscale.gui.utils;
|
package com.health.openscale.gui.utils;
|
||||||
|
|
||||||
|
import static android.content.Context.LOCATION_SERVICE;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
@@ -33,10 +35,8 @@ import androidx.fragment.app.Fragment;
|
|||||||
|
|
||||||
import com.health.openscale.R;
|
import com.health.openscale.R;
|
||||||
|
|
||||||
import static android.content.Context.LOCATION_SERVICE;
|
|
||||||
|
|
||||||
public class PermissionHelper {
|
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_READ_STORAGE = 2;
|
||||||
public final static int PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE = 3;
|
public final static int PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE = 3;
|
||||||
|
|
||||||
@@ -62,6 +62,21 @@ public class PermissionHelper {
|
|||||||
return false;
|
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 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
if (fragment.getContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
if (fragment.getContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getActivity());
|
||||||
@@ -72,7 +87,7 @@ public class PermissionHelper {
|
|||||||
.setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() {
|
.setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() {
|
||||||
public void onClick(DialogInterface dialog, int id) {
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
dialog.dismiss();
|
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