我正在处理应用程序来电屏幕上的来电。我无法接受Android棉花糖和Nougat API级别23至25上的来电。
public void acceptCall(){ TelecomManager telecomManager = null;
//API level >=26
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
telecomManager = (TelecomManager) getApplicationContext().getSystemService(Context.TELECOM_SERVICE);
telecomManager.acceptRingingCall();
}
//API level >=22
else if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
try {
Runtime. getRuntime (). exec ("input keyevent " +
Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));
} catch (IOException e) {
// Runtime.exec(String) had an I/O problem, try to fall back
String enforcedPerm = "android.permission.CALL_PRIVILEGED";
Intent btnDown = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(
Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_HEADSETHOOK));
Intent btnUp = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(
Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_HEADSETHOOK));
context.sendOrderedBroadcast(btnDown, enforcedPerm);
context.sendOrderedBroadcast(btnUp, enforcedPerm);
}
}
//API level =23 || API=25||API=26
if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.M || android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N_MR1 ||
android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N) {
//what code should i do here?
}
}
答案 0 :(得分:0)
请参阅TelecomManager
的文档:https://developer.android.com/reference/android/telecom/TelecomManager#acceptRingingCall()
请注意,访问某些电信信息受权限保护。除非您的应用在清单文件中声明了适当的权限,否则您将无法访问受保护的信息或无法访问受保护的功能。在权限适用的地方,它们会在方法说明中注明。
对acceptRingingCall()
的调用受归为“危险”权限的保护。在Android版本的棉花糖(API 23)或更高版本上,您将必须在运行时请求权限,并将其包含在清单中。
答案 1 :(得分:0)
来自Google的更新:
telecomManager.acceptRingingCall();
telecomManager.acceptRingingCall(false);
telecomManager.endCall();
这三个命令在Android Q和Android Q上均已弃用