最近在看Android USB主从设备通讯(下载Demo)相关的东西,调试时每次运行都弹下面的框,即使勾选“默认情况下用于该USB设备”,还是会弹出,在调试阶段频繁弹框影响开发效率。
下面分享下怎么屏蔽USB权限框:
1. 做过相关开发的都见过下面代码
// Check whether we have permission to access the device.
if (!mUsbManager.hasPermission(device)) {
Intent intent = new Intent(ACTION_USB_DEVICE_PERMISSION);
intent.setPackage(getPackageName());
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
mUsbManager.requestPermission(device, pendingIntent);
return;
}
意思在没有权限的情况下,请求权限才弹的框。
2. 分析弹框流程
mUsbManager.requestPermission(UsbDevice device...);//以UsbDevice为例,UsbAccessory同理
a. frameworks/base/core/java/android/hardware/usb/UsbManager.java=>requestPermission
public void requestPermission(UsbDevice device, PendingIntent pi) {
try {
mService.requestDevicePermission(device, mContext.getPackageName(), pi);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
b. frameworks/base/core/java/android/hardware/usb/UsbDevice.java=>requestDevicePermission
@Override
public void requestDevicePermission(UsbDevice device, String packageName, PendingIntent pi) {
final int userId = UserHandle.getCallingUserId();
getSettingsForUser(userId).requestPermission(device, packageName, pi);
}
getSettingsForUser是
UsbDevice成员函数
private UsbSettingsManager getSettingsForUser(int userId) {
synchronized (mLock) {
UsbSettingsMana