Skip to content

Commit 177d97d

Browse files
apurunifacebook-github-bot
authored andcommitted
For targeting SDK 34 - Added RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTED flag support in DevSupportManagerBase (#38256)
Summary: Pull Request resolved: #38256 Add RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTED flag support to DevSupportManagerBase for Android 14 change. See https://developer.android.com/about/versions/14/behavior-changes-14#runtime-receivers-exported for details. Without this fix, app crashes during launch because of : ```SecurityException: {package name here}: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts``` Changelog: [Targeting SDK 34] Added RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTED flag support in DevSupportManagerBase Reviewed By: javache Differential Revision: D47313501 fbshipit-source-id: 12e8299559d08b4ff87b4bdabb0a29d27763c698
1 parent dc68457 commit 177d97d

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.content.pm.PackageManager;
2020
import android.graphics.Typeface;
2121
import android.hardware.SensorManager;
22+
import android.os.Build;
2223
import android.util.Pair;
2324
import android.view.Gravity;
2425
import android.view.View;
@@ -1022,7 +1023,7 @@ private void reload() {
10221023
if (!mIsReceiverRegistered) {
10231024
IntentFilter filter = new IntentFilter();
10241025
filter.addAction(getReloadAppAction(mApplicationContext));
1025-
mApplicationContext.registerReceiver(mReloadAppBroadcastReceiver, filter);
1026+
compatRegisterReceiver(mApplicationContext, mReloadAppBroadcastReceiver, filter, true);
10261027
mIsReceiverRegistered = true;
10271028
}
10281029

@@ -1120,4 +1121,21 @@ public void setPackagerLocationCustomizer(
11201121

11211122
return mSurfaceDelegateFactory.createSurfaceDelegate(moduleName);
11221123
}
1124+
1125+
/**
1126+
* Starting with Android 14, apps and services that target Android 14 and use context-registered
1127+
* receivers are required to specify a flag to indicate whether or not the receiver should be
1128+
* exported to all other apps on the device: either RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED
1129+
*
1130+
* <p>https://developer.android.com/about/versions/14/behavior-changes-14#runtime-receivers-exported
1131+
*/
1132+
private void compatRegisterReceiver(
1133+
Context context, BroadcastReceiver receiver, IntentFilter filter, boolean exported) {
1134+
if (Build.VERSION.SDK_INT >= 34 && context.getApplicationInfo().targetSdkVersion >= 34) {
1135+
context.registerReceiver(
1136+
receiver, filter, exported ? Context.RECEIVER_EXPORTED : Context.RECEIVER_NOT_EXPORTED);
1137+
} else {
1138+
context.registerReceiver(receiver, filter);
1139+
}
1140+
}
11231141
}

0 commit comments

Comments
 (0)