订购广播无法接受来电

时间:2018-07-02 07:26:03

标签: android

我正在制作一个创建自定义呼叫接收屏幕的应用程序。我设法显示了屏幕并添加了一个拒绝来电的按钮。为了接受来电,我的代码无法正常工作。我正在尝试使用有序广播来接听电话,但是代码不起作用。它不会引发任何异常或崩溃。它什么也没做。这是我正在使用的代码:

Intent answer = new Intent(Intent.ACTION_MEDIA_BUTTON);
                answer.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
                sendOrderedBroadcast(answer, null);

我正在修改旧问题。 谢谢。

1 个答案:

答案 0 :(得分:0)

正如“异常”消息中所述,您没有接听电话的权限。

Android使用权限系统来保护应用程序对敏感功能的访问。当您要使用某些功能时,需要在清单中声明执行此操作的权限。

有两种权限:普通危险。如果在清单中声明了普通选项,则会自动授予它们。危险用户还需要运行时批准:您的应用在运行时请求声明的权限,而Android会提示用户进行批准。详细了解此here

您要查找的权限是Manifest.permission.ANSWER_PHONE_CALLS

像这样在清单中声明它:

<manifest […]>

    <uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>
    <!-- declare other permissions the same way here -->

    […]

</manifest>

在运行时,检查您是否具有所需的权限,并且只有在执行此操作时才能执行操作:

if(ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ANSWER_PHONE_CALLS)
        == PackageManager.PERMISSION_GRANTED) {
    // Your code using the dangerous permission goes here
} else {
    // request the permission, see below
}

thisActivity是您当前的活动。

要请求许可,请使用:

ActivityCompat.requestPermissions(thisActivity,
            new String[] {Manifest.permission.ANSWER_PHONE_CALLS},
            PERMISSIONS_ANSWER_PHONE_CALLS);

PERMISSIONS_ANSWER_PHONE_CALLS是您用唯一值定义的int常量。

该权限是异步请求的,这意味着在授予或拒绝该权限时会通知您。要接收此通知,请覆盖此回调:

@Override
public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    switch(requestCode) { // check which permission was requested
        case PERMISSIONS_REQUEST_ANSWER_PHONE_CALLS:
            // check whether permission was granted
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted; you can call your method requiring this permission now
            } else {
                // permission was denied, you probably want to show a message that your feature won't be available
            }
            return;
            // code for other permission requests goes here
    }
}