我有一个能够在屏幕打开时与USB配件通信的应用程序。
安装应用程序后,我要做的第一件事就是打开屏幕然后插上USB附件。我收到消息“这个USB配件连接时打开了吗?”。此外,还有一个复选框,上面写着“默认使用此USB配件”。我单击复选框并按OK。[1]
现在,每当我插入USB配件时,我的应用程序就会弹出到前台。发生这种情况的原因是因为我在AndroidManifest.xml中有以下内容:
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/accessory_filter" />
发生这种情况后,我会调用此处定义的enable():
public boolean enable() {
UsbManager deviceManager = null;
UsbAccessory[] accessories = null;
UsbAccessory accessory = null;
deviceManager = (UsbManager) context
.getSystemService(Context.USB_SERVICE);
accessories = deviceManager.getAccessoryList();
accessory = accessories[0];
if (accessory == null) {
return false;
}
logDRemote("Accessory is " + accessory);
// If we have permission to access the accessory,
if (deviceManager.hasPermission(accessory)) {
parcelFileDescriptor = deviceManager
.openAccessory(accessory);
if (parcelFileDescriptor != null) {
logDRemote("descriptor is not null");
if(parcelFileDescriptor == null) {
logDRemote("parcelFileDescriptor == null");
return false;
}
outputStream = new FileOutputStream(
parcelFileDescriptor.getFileDescriptor());
if(outputStream == null) {
logDRemote( "outputStream == null");
return false;
}
logDRemote("outputStream open");
byte[] data = new byte[2];
data[0] = (byte) APP_CONNECT;
data[1] = 0;
try {
outputStream.write(data);
} catch (IOException e) {
logDRemote("Could not open accessory");
closeAccessory();
return RETURN_CODES.FILE_DESCRIPTOR_WOULD_NOT_OPEN;
}
return true;
} else {
return false;
}
} else {
return false;
}
}
当我在活动弹出到前台后调用它时,我调用此函数并返回true
,表明USB设备正在正常通信。
问题是,如果我在没有PIN的情况下关闭屏幕但是我必须向上滑动解锁手机,会发生以下情况:
我找到了解决第一个问题的方法。我能够做的是每当我检测到USB充电器存在时就打开活动[3]。现在发生以下情况:
但是,当我在手机上设置了针脚时,此修复程序无效。现在发生以下情况:
当我的Android手机关机并设置了针脚时,如何连接USB设备?如果有帮助的话,我有根。
顺便说一下,这写入/data/system/users/0/usb_device_manager.xml
,如此处的来源所示:http://androidxref.com/7.0.0_r1/xref/frameworks/base/services/usb/java/com/android/server/usb/UsbSettingsManager.java#mSettingsFile
我在活动的onCreate中放入以下内容,以便在屏幕关闭时显示:
-
final Window win= getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);