Android 接受来电的命令广播不工作

Android 接受来电的命令广播不工作,android,Android,我正在制作一个应用程序,创建自定义的呼叫接收屏幕。我已经成功地显示了屏幕,并添加了一个拒绝来电的按钮。对于接听来电,我的代码不起作用。我尝试使用有序广播来接受呼叫,但代码不起作用。它不会抛出任何异常或崩溃。这根本没用。以下是我正在使用的代码: Intent answer = new Intent(Intent.ACTION_MEDIA_BUTTON); answer.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(Key

我正在制作一个应用程序,创建自定义的呼叫接收屏幕。我已经成功地显示了屏幕,并添加了一个拒绝来电的按钮。对于接听来电,我的代码不起作用。我尝试使用有序广播来接受呼叫,但代码不起作用。它不会抛出任何异常或崩溃。这根本没用。以下是我正在使用的代码:

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);
我正在修改老问题。
谢谢。

如例外消息所述,您没有接听电话的权限

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

有两种权限:普通权限和危险权限。如果在清单中声明了正常的,则会自动授予它们。危险的应用程序还需要运行时批准:您的应用程序在运行时请求声明的权限,Android会提示用户进行批准。请阅读更多关于此的信息

您正在寻找的许可是

在您的清单中声明如下:

<manifest […]>

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

    […]

</manifest>
其中,
thisActivity
是您当前的活动

要请求许可,请使用:

ActivityCompat.requestPermissions(thisActivity,
            new String[] {Manifest.permission.ANSWER_PHONE_CALLS},
            PERMISSIONS_ANSWER_PHONE_CALLS);
其中,
PERMISSIONS\u ANSWER\u PHONE\u 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
    }
}

我已经在清单中添加了权限,并在运行时请求它,但这并没有切断它。还有一件事我也不明白,为什么我需要接听电话的权限才能得到可用媒体控制器的列表,因为在这一点上出现了例外,你需要
接听电话的权限才能真正接听电话。要获取可用MediaController的列表,您需要传入您的enabled
NotificationListener
组件名
,请参见:您能解释一下“enabled”是什么意思吗?
@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
    }
}