外接usb设备权限全开(比如外接摄像头):
override/frameworks/base/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java
public boolean hasPermission(UsbDevicedevice, String packageName, int uid) {
/*/tyd.yantao 20230202 grant permission directly
if (isCameraDevicePresent(device)) {
if (!isCameraPermissionGranted(packageName, uid)) {
return false;
}
}
return mUsbPermissionManager.hasPermission(device, uid);
//*/
return true;
//*/
}
指定按键模拟其他指定按键的默认功能 ,比如某按键按两下支持挂断电话:
在对应的键值case下
if (count == 2) {
TelephonyManager telephonyManager2 =(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
if(telephonyManager2.getCallState() !=0){
sendFakeKey(KeyEvent.KEYCODE_ENDCALL);
}
主要是这两个方法,参数不一样,反正默认是down,第二个使用一般涉及up的操作
private void sendFakeKey(int key) {
long now = SystemClock.uptimeMillis();
KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, key, 0);
InputManager.getInstance().injectInputEvent(down,InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, key, 0);
InputManager.getInstance().injectInputEvent(up, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}
private void sendFakeKey(int key,String keyACTION) {
long now = SystemClock.uptimeMillis();
if(keyACTION=="down"){
KeyEvent down = newKeyEvent(now, now, KeyEvent.ACTION_DOWN, key, 0);
InputManager.getInstance().injectInputEvent(down,InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}else if(keyACTION=="up"){
KeyEvent up = new KeyEvent(now,now, KeyEvent.ACTION_UP, key, 0);
InputManager.getInstance().injectInputEvent(up,InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
}
}