Do not specify export flags for protected system broadcasts.
Protected system broadcasts should not specify the export flag. Marking them as NOT_EXPORTED breaks sticky broadcasts in some cases. Issue: google/ExoPlayer#10970 #minor-release PiperOrigin-RevId: 512020154 (cherry picked from commit 34b9824201314b4fa6442deac643635f2fa9e541)
This commit is contained in:
parent
342ae31a00
commit
29eeca3359
@ -93,7 +93,7 @@ public final class NetworkTypeObserver {
|
||||
networkType = C.NETWORK_TYPE_UNKNOWN;
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
||||
Util.registerReceiverNotExported(context, new Receiver(), filter);
|
||||
context.registerReceiver(new Receiver(), filter);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -203,6 +203,10 @@ public final class Util {
|
||||
* apps. This will be enforced by specifying {@link Context#RECEIVER_NOT_EXPORTED} if {@link
|
||||
* #SDK_INT} is 33 or above.
|
||||
*
|
||||
* <p>Do not use this method if registering a receiver for a <a
|
||||
* href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/AndroidManifest.xml">protected
|
||||
* system broadcast</a>.
|
||||
*
|
||||
* @param context The context on which {@link Context#registerReceiver} will be called.
|
||||
* @param receiver The {@link BroadcastReceiver} to register. This value may be null.
|
||||
* @param filter Selects the Intent broadcasts to be received.
|
||||
@ -218,32 +222,6 @@ public final class Util {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a {@link BroadcastReceiver} that's not intended to receive broadcasts from other
|
||||
* apps. This will be enforced by specifying {@link Context#RECEIVER_NOT_EXPORTED} if {@link
|
||||
* #SDK_INT} is 33 or above.
|
||||
*
|
||||
* @param context The context on which {@link Context#registerReceiver} will be called.
|
||||
* @param receiver The {@link BroadcastReceiver} to register. This value may be null.
|
||||
* @param filter Selects the Intent broadcasts to be received.
|
||||
* @param handler Handler identifying the thread that will receive the Intent.
|
||||
* @return The first sticky intent found that matches {@code filter}, or null if there are none.
|
||||
*/
|
||||
@Nullable
|
||||
public static Intent registerReceiverNotExported(
|
||||
Context context, BroadcastReceiver receiver, IntentFilter filter, Handler handler) {
|
||||
if (SDK_INT < 33) {
|
||||
return context.registerReceiver(receiver, filter, /* broadcastPermission= */ null, handler);
|
||||
} else {
|
||||
return context.registerReceiver(
|
||||
receiver,
|
||||
filter,
|
||||
/* broadcastPermission= */ null,
|
||||
handler,
|
||||
Context.RECEIVER_NOT_EXPORTED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls {@link Context#startForegroundService(Intent)} if {@link #SDK_INT} is 26 or higher, or
|
||||
* {@link Context#startService(Intent)} otherwise.
|
||||
|
@ -21,7 +21,6 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Handler;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
|
||||
/* package */ final class AudioBecomingNoisyManager {
|
||||
|
||||
@ -47,8 +46,8 @@ import com.google.android.exoplayer2.util.Util;
|
||||
*/
|
||||
public void setEnabled(boolean enabled) {
|
||||
if (enabled && !receiverRegistered) {
|
||||
Util.registerReceiverNotExported(
|
||||
context, receiver, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY));
|
||||
context.registerReceiver(
|
||||
receiver, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY));
|
||||
receiverRegistered = true;
|
||||
} else if (!enabled && receiverRegistered) {
|
||||
context.unregisterReceiver(receiver);
|
||||
|
@ -74,7 +74,7 @@ import com.google.android.exoplayer2.util.Util;
|
||||
VolumeChangeReceiver receiver = new VolumeChangeReceiver();
|
||||
IntentFilter filter = new IntentFilter(VOLUME_CHANGED_ACTION);
|
||||
try {
|
||||
Util.registerReceiverNotExported(applicationContext, receiver, filter);
|
||||
applicationContext.registerReceiver(receiver, filter);
|
||||
this.receiver = receiver;
|
||||
} catch (RuntimeException e) {
|
||||
Log.w(TAG, "Error registering stream volume receiver", e);
|
||||
|
@ -86,8 +86,8 @@ public final class AudioCapabilities {
|
||||
@SuppressWarnings("InlinedApi")
|
||||
public static AudioCapabilities getCapabilities(Context context) {
|
||||
Intent intent =
|
||||
Util.registerReceiverNotExported(
|
||||
context, /* receiver= */ null, new IntentFilter(AudioManager.ACTION_HDMI_AUDIO_PLUG));
|
||||
context.registerReceiver(
|
||||
/* receiver= */ null, new IntentFilter(AudioManager.ACTION_HDMI_AUDIO_PLUG));
|
||||
return getCapabilities(context, intent);
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,9 @@ public final class AudioCapabilitiesReceiver {
|
||||
@Nullable Intent stickyIntent = null;
|
||||
if (receiver != null) {
|
||||
IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_HDMI_AUDIO_PLUG);
|
||||
stickyIntent = Util.registerReceiverNotExported(context, receiver, intentFilter, handler);
|
||||
stickyIntent =
|
||||
context.registerReceiver(
|
||||
receiver, intentFilter, /* broadcastPermission= */ null, handler);
|
||||
}
|
||||
audioCapabilities = AudioCapabilities.getCapabilities(context, stickyIntent);
|
||||
return audioCapabilities;
|
||||
|
@ -182,8 +182,8 @@ public final class Requirements implements Parcelable {
|
||||
private boolean isDeviceCharging(Context context) {
|
||||
@Nullable
|
||||
Intent batteryStatus =
|
||||
Util.registerReceiverNotExported(
|
||||
context, /* receiver= */ null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
||||
context.registerReceiver(
|
||||
/* receiver= */ null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
||||
if (batteryStatus == null) {
|
||||
return false;
|
||||
}
|
||||
@ -201,8 +201,8 @@ public final class Requirements implements Parcelable {
|
||||
}
|
||||
|
||||
private boolean isStorageNotLow(Context context) {
|
||||
return Util.registerReceiverNotExported(
|
||||
context, /* receiver= */ null, new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW))
|
||||
return context.registerReceiver(
|
||||
/* receiver= */ null, new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW))
|
||||
== null;
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ public final class RequirementsWatcher {
|
||||
filter.addAction(Intent.ACTION_DEVICE_STORAGE_OK);
|
||||
}
|
||||
receiver = new DeviceStatusChangeReceiver();
|
||||
Util.registerReceiverNotExported(context, receiver, filter, handler);
|
||||
context.registerReceiver(receiver, filter, /* broadcastPermission= */ null, handler);
|
||||
return notMetRequirements;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user