Skip to content

Commit

Permalink
More Android 14 fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
weliem committed Oct 23, 2023
1 parent c5de28d commit a37d2f5
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ public void onMtuChanged(@NotNull BluetoothPeripheral peripheral, int mtu, @NotN

private void sendMeasurement(@NotNull Intent intent, @NotNull BluetoothPeripheral peripheral ) {
intent.putExtra(MEASUREMENT_EXTRA_PERIPHERAL, peripheral.getAddress());
intent.setPackage(context.getPackageName());
context.sendBroadcast(intent);
}

Expand Down
93 changes: 52 additions & 41 deletions app/src/main/java/com/welie/blessedexample/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.welie.blessedexample;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
Expand All @@ -12,8 +14,15 @@
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.os.Build;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.os.Bundle;
import android.widget.TextView;

Expand All @@ -27,30 +36,63 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;

import timber.log.Timber;

public class MainActivity extends AppCompatActivity {

private TextView measurementValue;
private static final int REQUEST_ENABLE_BT = 1;
private static final int ACCESS_LOCATION_REQUEST = 2;

private final DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.ENGLISH);

private final ActivityResultLauncher<String[]> blePermissionRequest = registerForActivityResult(
new ActivityResultContracts.RequestMultiplePermissions(),
new ActivityResultCallback<Map<String, Boolean>>() {
@Override
public void onActivityResult(Map<String, Boolean> result) {
for(String key : result.keySet()) {
Timber.d("%s, %s", key, result);
}
}
});

private final ActivityResultLauncher<Intent> enableBleRequest = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
onResume();
}
}
});

@SuppressLint("UnspecifiedRegisterReceiverFlag")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
measurementValue = (TextView) findViewById(R.id.bloodPressureValue);

registerReceiver(locationServiceStateReceiver, new IntentFilter((LocationManager.MODE_CHANGED_ACTION)));
registerReceiver(bloodPressureDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_BLOODPRESSURE ));
registerReceiver(temperatureDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_TEMPERATURE ));
registerReceiver(heartRateDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_HEARTRATE ));
registerReceiver(pulseOxDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_PULSE_OX ));
registerReceiver(weightDataReceiver, new IntentFilter(BluetoothHandler.MEASUREMENT_WEIGHT));
registerReceiver(glucoseDataReceiver, new IntentFilter(BluetoothHandler.MEASUREMENT_GLUCOSE));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU ? Context.RECEIVER_NOT_EXPORTED : 0 ;
registerReceiver(bloodPressureDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_BLOODPRESSURE ), flags);
registerReceiver(temperatureDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_TEMPERATURE ), flags);
registerReceiver(heartRateDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_HEARTRATE ), flags);
registerReceiver(pulseOxDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_PULSE_OX ), flags);
registerReceiver(weightDataReceiver, new IntentFilter(BluetoothHandler.MEASUREMENT_WEIGHT), flags);
registerReceiver(glucoseDataReceiver, new IntentFilter(BluetoothHandler.MEASUREMENT_GLUCOSE), flags);
} else {
registerReceiver(bloodPressureDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_BLOODPRESSURE ));
registerReceiver(temperatureDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_TEMPERATURE ));
registerReceiver(heartRateDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_HEARTRATE ));
registerReceiver(pulseOxDataReceiver, new IntentFilter( BluetoothHandler.MEASUREMENT_PULSE_OX ));
registerReceiver(weightDataReceiver, new IntentFilter(BluetoothHandler.MEASUREMENT_WEIGHT));
registerReceiver(glucoseDataReceiver, new IntentFilter(BluetoothHandler.MEASUREMENT_GLUCOSE));
}
}

@Override
Expand All @@ -59,8 +101,7 @@ protected void onResume() {

if (getBluetoothManager().getAdapter() != null) {
if (!isBluetoothEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
enableBleRequest.launch(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));
} else {
checkPermissions();
}
Expand Down Expand Up @@ -188,7 +229,7 @@ private void checkPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String[] missingPermissions = getMissingPermissions(getRequiredPermissions());
if (missingPermissions.length > 0) {
requestPermissions(missingPermissions, ACCESS_LOCATION_REQUEST);
blePermissionRequest.launch(missingPermissions);
} else {
permissionsGranted();
}
Expand Down Expand Up @@ -271,34 +312,4 @@ public void onClick(DialogInterface dialog, int which) {
return true;
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

// Check if all permission were granted
boolean allGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}

if (allGranted) {
permissionsGranted();
} else {
new AlertDialog.Builder(MainActivity.this)
.setTitle("Permission is required for scanning Bluetooth peripherals")
.setMessage("Please grant permissions")
.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
checkPermissions();
}
})
.create()
.show();
}
}
}
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {

}
dependencies {
classpath 'com.android.tools.build:gradle:8.1.1'
classpath 'com.android.tools.build:gradle:8.1.2'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down

0 comments on commit a37d2f5

Please sign in to comment.