From 26a2f9363e3b48c044160dfbd3e6e7afe51fbf0a Mon Sep 17 00:00:00 2001 From: Kai Morich Date: Sun, 18 Feb 2024 13:09:23 +0100 Subject: [PATCH] target sdk 34 Pending intent and broadcast receiver changed according to sdk 34 release notes. Permisssion dialog now shown while fragment is paused. --- usbSerialExamples/build.gradle | 4 ++-- .../usbserial/examples/TerminalFragment.java | 22 ++++++++++++++----- usbSerialForAndroid/build.gradle | 4 ++-- .../android/usbserial/util/UsbWrapper.java | 6 +++-- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/usbSerialExamples/build.gradle b/usbSerialExamples/build.gradle index 2f442b1..b53c7bd 100644 --- a/usbSerialExamples/build.gradle +++ b/usbSerialExamples/build.gradle @@ -3,7 +3,7 @@ plugins { } android { - compileSdkVersion 33 + compileSdkVersion 34 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -12,7 +12,7 @@ android { defaultConfig { minSdkVersion 17 - targetSdkVersion 33 + targetSdkVersion 34 vectorDrawables.useSupportLibrary = true missingDimensionStrategy 'device', 'anyDevice' diff --git a/usbSerialExamples/src/main/java/com/hoho/android/usbserial/examples/TerminalFragment.java b/usbSerialExamples/src/main/java/com/hoho/android/usbserial/examples/TerminalFragment.java index b286a94..23cda9b 100644 --- a/usbSerialExamples/src/main/java/com/hoho/android/usbserial/examples/TerminalFragment.java +++ b/usbSerialExamples/src/main/java/com/hoho/android/usbserial/examples/TerminalFragment.java @@ -28,6 +28,7 @@ import android.widget.ToggleButton; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.hoho.android.usbserial.driver.UsbSerialDriver; @@ -89,12 +90,22 @@ public class TerminalFragment extends Fragment implements SerialInputOutputManag withIoManager = getArguments().getBoolean("withIoManager"); } + @Override + public void onStart() { + super.onStart(); + ContextCompat.registerReceiver(getActivity(), broadcastReceiver, new IntentFilter(INTENT_ACTION_GRANT_USB), ContextCompat.RECEIVER_NOT_EXPORTED); + } + + @Override + public void onStop() { + getActivity().unregisterReceiver(broadcastReceiver); + super.onStop(); + } + @Override public void onResume() { super.onResume(); - getActivity().registerReceiver(broadcastReceiver, new IntentFilter(INTENT_ACTION_GRANT_USB)); - - if(usbPermission == UsbPermission.Unknown || usbPermission == UsbPermission.Granted) + if(!connected && (usbPermission == UsbPermission.Unknown || usbPermission == UsbPermission.Granted)) mainLooper.post(this::connect); } @@ -104,7 +115,6 @@ public class TerminalFragment extends Fragment implements SerialInputOutputManag status("disconnected"); disconnect(); } - getActivity().unregisterReceiver(broadcastReceiver); super.onPause(); } @@ -213,7 +223,9 @@ public class TerminalFragment extends Fragment implements SerialInputOutputManag if(usbConnection == null && usbPermission == UsbPermission.Unknown && !usbManager.hasPermission(driver.getDevice())) { usbPermission = UsbPermission.Requested; int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_MUTABLE : 0; - PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent(INTENT_ACTION_GRANT_USB), flags); + Intent intent = new Intent(INTENT_ACTION_GRANT_USB); + intent.setPackage(getActivity().getPackageName()); + PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, flags); usbManager.requestPermission(driver.getDevice(), usbPermissionIntent); return; } diff --git a/usbSerialForAndroid/build.gradle b/usbSerialForAndroid/build.gradle index ee784da..ee91de1 100644 --- a/usbSerialForAndroid/build.gradle +++ b/usbSerialForAndroid/build.gradle @@ -4,11 +4,11 @@ plugins { } android { - compileSdkVersion 33 + compileSdkVersion 34 defaultConfig { minSdkVersion 17 - targetSdkVersion 33 + targetSdkVersion 34 consumerProguardFiles 'proguard-rules.pro' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/util/UsbWrapper.java b/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/util/UsbWrapper.java index 2f9005f..d6a53a5 100644 --- a/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/util/UsbWrapper.java +++ b/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/util/UsbWrapper.java @@ -86,9 +86,11 @@ public class UsbWrapper implements SerialInputOutputManager.Listener { } }; int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_MUTABLE : 0; - PendingIntent permissionIntent = PendingIntent.getBroadcast(context, 0, new Intent("com.android.example.USB_PERMISSION"), flags); + Intent intent = new Intent("com.android.example.USB_PERMISSION"); + intent.setPackage(context.getPackageName()); + PendingIntent permissionIntent = PendingIntent.getBroadcast(context, 0, intent, flags); IntentFilter filter = new IntentFilter("com.android.example.USB_PERMISSION"); - context.registerReceiver(usbReceiver, filter); + context.registerReceiver(usbReceiver, filter, Context.RECEIVER_NOT_EXPORTED); usbManager.requestPermission(serialDriver.getDevice(), permissionIntent); for(int i=0; i<5000; i++) { if(granted[0] != null) break;