Skip to content

Commit

Permalink
feat(android)!: specify export mode on BroadcastReceivers, requires c…
Browse files Browse the repository at this point in the history
…ompileSdk 33+ (#692)

BREAKING CHANGE:
- compileSdk minimum is now 33
- windows SDK minimum bumped to 10.0.17763.0 for current react-native-windows
  • Loading branch information
AndyG committed Nov 4, 2023
1 parent 887131e commit a5864cc
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
3 changes: 2 additions & 1 deletion android/gradle.properties
@@ -1,4 +1,5 @@
ReactNativeNetInfo_compileSdkVersion=29
ReactNativeNetInfo_compileSdkVersion=33
ReactNativeNetInfo_buildToolsVersion=29.0.3
ReactNativeNetInfo_targetSdkVersion=27
ReactNativeNetInfo_minSdkVersion=16
android.useAndroidX=true
Expand Up @@ -90,7 +90,7 @@ private void registerReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_INTERNET_DOWN);
filter.addAction(ACTION_INTERNET_UP);
context.registerReceiver(receiver, filter);
NetInfoUtils.compatRegisterReceiver(context, receiver, filter, false);

receiver.registered = true;
}
Expand Down
Expand Up @@ -39,7 +39,12 @@ public BroadcastReceiverConnectivityReceiver(ReactApplicationContext reactContex
public void register() {
IntentFilter filter = new IntentFilter();
filter.addAction(CONNECTIVITY_ACTION);
getReactContext().registerReceiver(mConnectivityBroadcastReceiver, filter);
NetInfoUtils.compatRegisterReceiver(
getReactContext(),
mConnectivityBroadcastReceiver,
filter,
false
);
mConnectivityBroadcastReceiver.setRegistered(true);
updateAndSendConnectionType();
}
Expand Down
Expand Up @@ -7,8 +7,12 @@
package com.reactnativecommunity.netinfo;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Build;

import androidx.core.content.ContextCompat;

Expand All @@ -25,4 +29,22 @@ public static boolean isAccessWifiStatePermissionGranted(Context context) {
return ContextCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_WIFI_STATE) == PackageManager.PERMISSION_GRANTED;
}


/**
* Starting with Android 14, apps and services that target Android 14 and use context-registered
* receivers are required to specify a flag to indicate whether or not the receiver should be
* exported to all other apps on the device: either RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED
* <a href="https://developer.android.com/about/versions/14/behavior-changes-14#runtime-receivers-exported"/>
*/
@SuppressLint("UnspecifiedRegisterReceiverFlag")
public static void compatRegisterReceiver(
Context context, BroadcastReceiver receiver, IntentFilter filter, boolean exported) {
if (Build.VERSION.SDK_INT >= 34 && context.getApplicationInfo().targetSdkVersion >= 34) {
context.registerReceiver(
receiver, filter, exported ? Context.RECEIVER_EXPORTED : Context.RECEIVER_NOT_EXPORTED);
} else {
context.registerReceiver(receiver, filter);
}
}
}

0 comments on commit a5864cc

Please sign in to comment.