为了解决这个问题,我们需要在 AndroidManifest.xml 中添加以下
而且,我们需要在 AIDL 接口上配置 @RequiresPermission 注释以说明所需的权限:
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.IInterface;
import android.os.RemoteException;
import androidx.annotation.RequiresPermission;
@SuppressLint("android.permission.INTERACT_ACROSS_USERS")
public interface MyAidlInterface extends IInterface {
@RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
void doSomething() throws RemoteException;
//其他方法
}
这样,在编译时,系统会检查权限是否正确配置。在运行时,当我们使用 MyAidlInterface 时,必须通过使用以下方法来确保该权限已被授予:
if (context.checkCallingOrSelfPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)==PackageManager.PERMISSION_GRANTED) {
myRemoteService.doSomething();
}
这种方法可以保证 AIDL/IPC 在 Android 12 上正常运行。