Android 模拟长按键盘编码\ U头方法OK
我试图在我的同伴应用程序中以编程方式控制目标Android 6.0及以上版本的来电(接受和拒绝) 工作方法,但已弃用 telecomManager.acceptCall()和telecomManager.endCall() 这种方法在Android10和虚拟Android11之前都运行良好,但在开发者网站上说它已经被弃用了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
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上的应用程序,它将不起作用。但配套应用程序不是系统应用程序,这是如何实现的?有人有其他解决方案吗?我被困在这里面了。