接受拨入电话无法在棉花糖和noughat中工作

时间:2019-02-09 10:59:23

标签: java android xml call

我正在处理应用程序来电屏幕上的来电。我无法接受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?

    }
}

2 个答案:

答案 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上均已弃用

click to verify here