From 7ac38bf72f2c89fae6beb7df9de55f6426d39a56 Mon Sep 17 00:00:00 2001 From: Philipp Wollschlegel Date: Thu, 13 Nov 2025 18:52:40 +0100 Subject: [PATCH] UsbSerial: android sdk 35 compatiblity --- build.gradle | 2 +- .../com/felhr/serialportexample/MainActivity.java | 7 ++++++- .../com/felhr/serialportexample/UsbService.java | 13 +++++++++++-- .../felhr/examplemultipleports/MainActivity.java | 7 ++++++- .../com/felhr/examplemultipleports/UsbService.java | 7 ++++++- .../java/com/felhr/examplestreams/MainActivity.java | 7 ++++++- .../java/com/felhr/examplestreams/UsbService.java | 13 +++++++++++-- .../felhr/serialportexamplesync/MainActivity.java | 7 ++++++- .../com/felhr/serialportexamplesync/UsbService.java | 13 +++++++++++-- gradle.properties | 4 ++-- .../java/com/felhr/integrationapp/MainActivity.java | 7 ++++++- .../java/com/felhr/integrationapp/UsbService.java | 13 +++++++++++-- .../com/felhr/integrationapp/UsbSyncService.java | 13 +++++++++++-- .../java/com/felhr/usbserial/SerialPortBuilder.java | 13 +++++++++++-- 14 files changed, 105 insertions(+), 21 deletions(-) diff --git a/build.gradle b/build.gradle index fb92dc5f..6f379a2a 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.android.tools.build:gradle:8.1.4' } } diff --git a/example/src/main/java/com/felhr/serialportexample/MainActivity.java b/example/src/main/java/com/felhr/serialportexample/MainActivity.java index 906b0fc8..0ff432aa 100644 --- a/example/src/main/java/com/felhr/serialportexample/MainActivity.java +++ b/example/src/main/java/com/felhr/serialportexample/MainActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -124,7 +125,11 @@ private void setFilters() { filter.addAction(UsbService.ACTION_USB_DISCONNECTED); filter.addAction(UsbService.ACTION_USB_NOT_SUPPORTED); filter.addAction(UsbService.ACTION_USB_PERMISSION_NOT_GRANTED); - registerReceiver(mUsbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(mUsbReceiver, filter, flags); } /* diff --git a/example/src/main/java/com/felhr/serialportexample/UsbService.java b/example/src/main/java/com/felhr/serialportexample/UsbService.java index 0efac01c..b3110e87 100644 --- a/example/src/main/java/com/felhr/serialportexample/UsbService.java +++ b/example/src/main/java/com/felhr/serialportexample/UsbService.java @@ -10,6 +10,7 @@ import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.util.Log; @@ -223,7 +224,11 @@ private void setFilter() { filter.addAction(ACTION_USB_PERMISSION); filter.addAction(ACTION_USB_DETACHED); filter.addAction(ACTION_USB_ATTACHED); - registerReceiver(usbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(usbReceiver, filter, flags); } /* @@ -231,7 +236,11 @@ private void setFilter() { */ private void requestUserPermission() { Log.d(TAG, String.format("requestUserPermission(%X:%X)", device.getVendorId(), device.getProductId() ) ); - PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + flags = PendingIntent.FLAG_IMMUTABLE; + } + PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), flags); usbManager.requestPermission(device, mPendingIntent); } diff --git a/examplemultipleports/src/main/java/com/felhr/examplemultipleports/MainActivity.java b/examplemultipleports/src/main/java/com/felhr/examplemultipleports/MainActivity.java index b0a3a2da..427554ef 100644 --- a/examplemultipleports/src/main/java/com/felhr/examplemultipleports/MainActivity.java +++ b/examplemultipleports/src/main/java/com/felhr/examplemultipleports/MainActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.Message; @@ -134,7 +135,11 @@ private void setFilters() { filter.addAction(UsbService.ACTION_USB_DISCONNECTED); filter.addAction(UsbService.ACTION_USB_NOT_SUPPORTED); filter.addAction(UsbService.ACTION_USB_PERMISSION_NOT_GRANTED); - registerReceiver(mUsbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(mUsbReceiver, filter, flags); } /* diff --git a/examplemultipleports/src/main/java/com/felhr/examplemultipleports/UsbService.java b/examplemultipleports/src/main/java/com/felhr/examplemultipleports/UsbService.java index dae18a63..7f50f98e 100644 --- a/examplemultipleports/src/main/java/com/felhr/examplemultipleports/UsbService.java +++ b/examplemultipleports/src/main/java/com/felhr/examplemultipleports/UsbService.java @@ -9,6 +9,7 @@ import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -177,7 +178,11 @@ private void setFilter() { filter.addAction(ACTION_USB_PERMISSION); filter.addAction(ACTION_USB_DETACHED); filter.addAction(ACTION_USB_ATTACHED); - registerReceiver(usbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(usbReceiver, filter, flags); } public class UsbBinder extends Binder { diff --git a/examplestreams/src/main/java/com/felhr/examplestreams/MainActivity.java b/examplestreams/src/main/java/com/felhr/examplestreams/MainActivity.java index 83863780..a93577f1 100644 --- a/examplestreams/src/main/java/com/felhr/examplestreams/MainActivity.java +++ b/examplestreams/src/main/java/com/felhr/examplestreams/MainActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.Message; @@ -160,7 +161,11 @@ private void setFilters() { filter.addAction(UsbService.ACTION_USB_DISCONNECTED); filter.addAction(UsbService.ACTION_USB_NOT_SUPPORTED); filter.addAction(UsbService.ACTION_USB_PERMISSION_NOT_GRANTED); - registerReceiver(mUsbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(mUsbReceiver, filter, flags); } /* diff --git a/examplestreams/src/main/java/com/felhr/examplestreams/UsbService.java b/examplestreams/src/main/java/com/felhr/examplestreams/UsbService.java index f53ec19a..1e02abf9 100644 --- a/examplestreams/src/main/java/com/felhr/examplestreams/UsbService.java +++ b/examplestreams/src/main/java/com/felhr/examplestreams/UsbService.java @@ -10,6 +10,7 @@ import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.util.Log; @@ -203,7 +204,11 @@ private void setFilter() { filter.addAction(ACTION_USB_PERMISSION); filter.addAction(ACTION_USB_DETACHED); filter.addAction(ACTION_USB_ATTACHED); - registerReceiver(usbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(usbReceiver, filter, flags); } /* @@ -211,7 +216,11 @@ private void setFilter() { */ private void requestUserPermission() { Log.d(TAG, String.format("requestUserPermission(%X:%X)", device.getVendorId(), device.getProductId() ) ); - PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + flags = PendingIntent.FLAG_IMMUTABLE; + } + PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), flags); usbManager.requestPermission(device, mPendingIntent); } diff --git a/examplesync/src/main/java/com/felhr/serialportexamplesync/MainActivity.java b/examplesync/src/main/java/com/felhr/serialportexamplesync/MainActivity.java index f6485032..595738e8 100644 --- a/examplesync/src/main/java/com/felhr/serialportexamplesync/MainActivity.java +++ b/examplesync/src/main/java/com/felhr/serialportexamplesync/MainActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -160,7 +161,11 @@ private void setFilters() { filter.addAction(UsbService.ACTION_USB_DISCONNECTED); filter.addAction(UsbService.ACTION_USB_NOT_SUPPORTED); filter.addAction(UsbService.ACTION_USB_PERMISSION_NOT_GRANTED); - registerReceiver(mUsbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(mUsbReceiver, filter, flags); } /* diff --git a/examplesync/src/main/java/com/felhr/serialportexamplesync/UsbService.java b/examplesync/src/main/java/com/felhr/serialportexamplesync/UsbService.java index 2bccdcf4..cad63e86 100644 --- a/examplesync/src/main/java/com/felhr/serialportexamplesync/UsbService.java +++ b/examplesync/src/main/java/com/felhr/serialportexamplesync/UsbService.java @@ -10,6 +10,7 @@ import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.util.Log; @@ -233,7 +234,11 @@ private void setFilter() { filter.addAction(ACTION_USB_PERMISSION); filter.addAction(ACTION_USB_DETACHED); filter.addAction(ACTION_USB_ATTACHED); - registerReceiver(usbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(usbReceiver, filter, flags); } /* @@ -241,7 +246,11 @@ private void setFilter() { */ private void requestUserPermission() { Log.d(TAG, String.format("requestUserPermission(%X:%X)", device.getVendorId(), device.getProductId() ) ); - PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + flags = PendingIntent.FLAG_IMMUTABLE; + } + PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), flags); usbManager.requestPermission(device, mPendingIntent); } diff --git a/gradle.properties b/gradle.properties index c36a6b7a..aed7280e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ VERSION_NAME=6.1.0 VERSION_CODE=1 ANDROID_BUILD_MIN_SDK_VERSION=12 -ANDROID_BUILD_TARGET_SDK_VERSION=27 -ANDROID_BUILD_SDK_VERSION=27 +ANDROID_BUILD_TARGET_SDK_VERSION=35 +ANDROID_BUILD_SDK_VERSION=35 diff --git a/integrationapp/src/main/java/com/felhr/integrationapp/MainActivity.java b/integrationapp/src/main/java/com/felhr/integrationapp/MainActivity.java index 8d25bfcf..7fbd34db 100644 --- a/integrationapp/src/main/java/com/felhr/integrationapp/MainActivity.java +++ b/integrationapp/src/main/java/com/felhr/integrationapp/MainActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -152,7 +153,11 @@ private void setFilters() { filter.addAction(UsbService.ACTION_USB_DISCONNECTED); filter.addAction(UsbService.ACTION_USB_NOT_SUPPORTED); filter.addAction(UsbService.ACTION_USB_PERMISSION_NOT_GRANTED); - registerReceiver(mUsbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(mUsbReceiver, filter, flags); } private void resetTestTextViews(){ diff --git a/integrationapp/src/main/java/com/felhr/integrationapp/UsbService.java b/integrationapp/src/main/java/com/felhr/integrationapp/UsbService.java index 54f3813a..29c43e19 100644 --- a/integrationapp/src/main/java/com/felhr/integrationapp/UsbService.java +++ b/integrationapp/src/main/java/com/felhr/integrationapp/UsbService.java @@ -10,6 +10,7 @@ import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.util.Log; @@ -261,7 +262,11 @@ private void setFilter() { filter.addAction(ACTION_USB_PERMISSION); filter.addAction(ACTION_USB_DETACHED); filter.addAction(ACTION_USB_ATTACHED); - registerReceiver(usbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(usbReceiver, filter, flags); } /* @@ -269,7 +274,11 @@ private void setFilter() { */ private void requestUserPermission() { Log.d(TAG, String.format("requestUserPermission(%X:%X)", device.getVendorId(), device.getProductId() ) ); - PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + flags = PendingIntent.FLAG_IMMUTABLE; + } + PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), flags); usbManager.requestPermission(device, mPendingIntent); } diff --git a/integrationapp/src/main/java/com/felhr/integrationapp/UsbSyncService.java b/integrationapp/src/main/java/com/felhr/integrationapp/UsbSyncService.java index 50cf5ccb..15b5ced2 100644 --- a/integrationapp/src/main/java/com/felhr/integrationapp/UsbSyncService.java +++ b/integrationapp/src/main/java/com/felhr/integrationapp/UsbSyncService.java @@ -10,6 +10,7 @@ import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.util.Log; @@ -201,7 +202,11 @@ private void setFilter() { filter.addAction(ACTION_USB_PERMISSION); filter.addAction(ACTION_USB_DETACHED); filter.addAction(ACTION_USB_ATTACHED); - registerReceiver(usbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + registerReceiver(usbReceiver, filter, flags); } /* @@ -209,7 +214,11 @@ private void setFilter() { */ private void requestUserPermission() { Log.d(TAG, String.format("requestUserPermission(%X:%X)", device.getVendorId(), device.getProductId() ) ); - PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + flags = PendingIntent.FLAG_IMMUTABLE; + } + PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), flags); usbManager.requestPermission(device, mPendingIntent); } diff --git a/usbserial/src/main/java/com/felhr/usbserial/SerialPortBuilder.java b/usbserial/src/main/java/com/felhr/usbserial/SerialPortBuilder.java index 295172de..27227fd6 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/SerialPortBuilder.java +++ b/usbserial/src/main/java/com/felhr/usbserial/SerialPortBuilder.java @@ -9,6 +9,7 @@ import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; +import android.os.Build; import com.annimon.stream.Optional; import com.annimon.stream.Stream; @@ -152,7 +153,11 @@ public void unregisterListeners(Context context){ } private PendingUsbPermission createUsbPermission(Context context, UsbDeviceStatus usbDeviceStatus){ - PendingIntent mPendingIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), 0); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + flags = PendingIntent.FLAG_IMMUTABLE; + } + PendingIntent mPendingIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), flags); PendingUsbPermission pendingUsbPermission = new PendingUsbPermission(); pendingUsbPermission.pendingIntent = mPendingIntent; pendingUsbPermission.usbDeviceStatus = usbDeviceStatus; @@ -176,7 +181,11 @@ private void initReceiver(Context context){ if(!broadcastRegistered) { IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_USB_PERMISSION); - context.registerReceiver(usbReceiver, filter); + int flags = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + flags = Context.RECEIVER_NOT_EXPORTED; + } + context.registerReceiver(usbReceiver, filter, flags); broadcastRegistered = true; } }