如何解决模拟KEYCODE_HEADSETHOOK长按
我正在尝试在我的配套应用中以编程方式控制来电(接受和拒绝)目标 Android 6.0 及更高版本。
工作方法但已弃用
telecomManager.acceptCall() 和 telecomManager.endCall() 这种方法在 Android 10 和虚拟 Android 11 之前都可以正常工作,但在开发者网站上它说它已被弃用。
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.");
}
}
在上面的一段代码中,我能够接听正在响铃的电话。要拒绝,我需要模拟长按相同的 KeyEvent。
1.如何实现一个keyEvent的长按?
2.对于上述需求,是否还有其他非弃用的实现方法?
3.在telecomManager类中,他们建议实现InCallService。如何在不将我的应用设为默认应用的情况下实现 InCallService?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。