[core] Unblock receiver by calling finish receiver (#685)

This commit is contained in:
LoveSy 2021-05-27 02:37:22 +08:00 committed by GitHub
parent 18c7f60171
commit 7e6c230494
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 1 deletions

View File

@ -110,6 +110,13 @@ public class ActivityManagerService {
}
}
public static void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map,
boolean abortBroadcast, int flags) throws RemoteException {
IActivityManager am = getActivityManager();
if (am == null || thread == null) return;
am.finishReceiver(who, resultCode, resultData, map, abortBroadcast, flags);
}
public static int bindService(Intent service,
String resolvedType, IServiceConnection connection, int flags,
String callingPackage, int userId) throws RemoteException {

View File

@ -186,6 +186,11 @@ public class LSPosedService extends ILSPosedService.Stub {
@Override
public void performReceive(Intent intent, int resultCode, String data, Bundle extras, boolean ordered, boolean sticky, int sendingUser) {
new Thread(() -> dispatchPackageChanged(intent)).start();
try {
ActivityManagerService.finishReceiver(this, resultCode, data, extras, false, intent.getFlags());
} catch (Throwable e) {
Log.e(TAG, "finish receiver", e);
}
}
};
@ -205,6 +210,11 @@ public class LSPosedService extends ILSPosedService.Stub {
@Override
public void performReceive(Intent intent, int resultCode, String data, Bundle extras, boolean ordered, boolean sticky, int sendingUser) {
new Thread(() -> dispatchBootCompleted(intent)).start();
try {
ActivityManagerService.finishReceiver(this, resultCode, data, extras, false, intent.getFlags());
} catch (Throwable e) {
Log.e(TAG, "finish receiver", e);
}
}
}, intentFilter, null, 0, 0);
} catch (Throwable e) {

View File

@ -70,7 +70,10 @@ public interface IActivityManager extends IInterface {
Intent registerReceiver(IApplicationThread caller, String callerPackage,
IIntentReceiver receiver, IntentFilter filter,
String requiredPermission, int userId, int flags);
String requiredPermission, int userId, int flags) throws RemoteException;
void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map,
boolean abortBroadcast, int flags) throws RemoteException;
@RequiresApi(30)
Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage,