Android 模拟长按键盘编码\ U头方法OK

Android 模拟长按键盘编码\ U头方法OK,android,key,usb,headset,Android,Key,Usb,Headset,我试图在我的同伴应用程序中以编程方式控制目标Android 6.0及以上版本的来电(接受和拒绝) 工作方法,但已弃用 telecomManager.acceptCall()和telecomManager.endCall() 这种方法在Android10和虚拟Android11之前都运行良好,但在开发者网站上说它已经被弃用了 This method was deprecated in API level 29. Companion apps for wearable devices should

我试图在我的同伴应用程序中以编程方式控制目标Android 6.0及以上版本的来电(接受和拒绝)

工作方法,但已弃用 telecomManager.acceptCall()和telecomManager.endCall() 这种方法在Android10和虚拟Android11之前都运行良好,但在开发者网站上说它已经被弃用了

This method was deprecated in API level 29.
Companion apps for wearable devices should use the InCallService API instead.
局部工作法 通过模拟耳机按键事件,发现通话可以控制。下面是我的实现

void sendHeadsetHookLollipop() {
    MediaSessionManager mediaSessionManager =  (MediaSessionManager) getApplicationContext().getSystemService(Context.MEDIA_SESSION_SERVICE);

 

    try {
        List<MediaController> mediaControllerList = mediaSessionManager.getActiveSessions 
                     (new ComponentName(getApplicationContext(), NotificationReceiverService.class));

 

        for (MediaController m : mediaControllerList) {
             if ("com.android.server.telecom".equals(m.getPackageName())) {
                 m.dispatchMediaButtonEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
                 log.info("HEADSETHOOK sent to telecom server");
                 break;
             }
        }
    } catch (SecurityException e) {
        log.error("Permission error. Access to notification not granted to the app.");      
    }  
}
void sendHeadsetHookLollipop(){
MediaSessionManager MediaSessionManager=(MediaSessionManager)getApplicationContext().getSystemService(Context.MEDIA_SESSION_SERVICE);
试一试{
列出mediaControllerList=mediaSessionManager.getActiveSessions
(新组件名(getApplicationContext(),NotificationReceiverService.class));
for(MediaController m:MediaController列表){
if(“com.android.server.telecom.”等于(m.getPackageName()){
m、 dispatchMediaButtonEvent(新的KeyEvent(KeyEvent.ACTION\u UP,KeyEvent.KEYCODE\u Headshook));
log.info(“发送到电信服务器的Headshook”);
打破
}
}
}捕获(安全异常e){
log.error(“权限错误。未授予应用程序访问通知的权限”);
}  
}
在上面的代码中,我能够接听来电。要拒绝,我需要模拟长按相同的KeyEvent

1.如何实现按键事件的长按? 2.对于上述需求,是否有其他未被否决的实现方法?
3.在telecomManager课程中,他们建议实施InCallService。如何实现InCallService而不使我的应用程序成为默认应用程序?这是谷歌不希望应用程序能够做到的行为。人们常常会找到一种方法来做这件事,而谷歌每次都会在下一个版本中删除它。除非你是注册拨号应用程序,否则你不能结束通话。你找不到一种可以跨所有版本使用的方法,对于大多数版本,你根本找不到任何方法。谢谢@Gabe sechan。只是想知道,配套应用程序(Galaxy wearable、Mi fit等)是如何工作的?系统应用程序有更高级别的权限可以使用。如果您的设备已建立根目录,并且您知道如何将应用程序设置为系统应用程序(需要通过命令行将apk放入正确的目录并重新启动手机),您也可以使用它们,但对于您打算放在play store上的应用程序,它将不起作用。但配套应用程序不是系统应用程序,这是如何实现的?有人有其他解决方案吗?这是谷歌不希望应用程序能够做到的行为。人们常常会找到一种方法来做这件事,而谷歌每次都会在下一个版本中删除它。除非你是注册拨号应用程序,否则你不能结束通话。你找不到一种可以跨所有版本使用的方法,对于大多数版本,你根本找不到任何方法。谢谢@Gabe sechan。只是想知道,配套应用程序(Galaxy wearable、Mi fit等)是如何工作的?系统应用程序有更高级别的权限可以使用。如果您的设备已建立根目录,并且您知道如何将应用程序设置为系统应用程序(需要通过命令行将apk放入正确的目录并重新启动手机),您也可以使用它们,但对于您打算放在play store上的应用程序,它将不起作用。但配套应用程序不是系统应用程序,这是如何实现的?有人有其他解决方案吗?我被困在这里面了。