外接usb设备权限全开(比如外接摄像头)。指定按键模拟其他指定按键的默认功能,比如某按键按两下支持挂断电话。

外接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);
           }
   }   

猜你喜欢

转载自blog.csdn.net/youthking1314/article/details/129620561