Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于监视电话呼叫状态的BroadcastReceiver在Android O API 27中无法正常工作_Java_Android_Kotlin_Telephonymanager_Android 8.1 Oreo - Fatal编程技术网

Java 用于监视电话呼叫状态的BroadcastReceiver在Android O API 27中无法正常工作

Java 用于监视电话呼叫状态的BroadcastReceiver在Android O API 27中无法正常工作,java,android,kotlin,telephonymanager,android-8.1-oreo,Java,Android,Kotlin,Telephonymanager,Android 8.1 Oreo,我有一个广播接收器类,它可以识别电话呼叫状态,(传出,传入,呼叫状态下挂,呼叫状态空闲)它对安卓N和更低版本工作正常,但对于安卓O,接收器无法识别呼叫是否已结束,没有呼叫状态空闲状态,但可以识别传出,传入和CALL\u STATE\u OFFHOOK状态正确 private fun startListening(context: Context) { val telManager = context.getSystemService(Context.TELEPHONY_SERVICE)

我有一个广播接收器类,它可以识别电话呼叫状态,(传出,传入,
呼叫状态下挂
呼叫状态空闲
)它对安卓N和更低版本工作正常,但对于安卓O,接收器无法识别呼叫是否已结束,没有
呼叫状态空闲
状态,但可以识别传出,传入和
CALL\u STATE\u OFFHOOK
状态正确

private fun startListening(context: Context) {
    val telManager = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
    telManager?.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE)
}


    private val phoneListener = object : PhoneStateListener() {
    override fun onCallStateChanged(state: Int, incomingNumber: String) {
        Log.e("CALL_STATE", "calling number $incomingNumber")
        try {
            when (state) {
                TelephonyManager.CALL_STATE_RINGING -> {
                    Log.e("CALL_STATE", "CALL_STATE_RINGING")
                }
                TelephonyManager.CALL_STATE_OFFHOOK -> {
                    Log.e("CALL_STATE", "CALL_STATE_OFFHOOK")
                }

                TelephonyManager.CALL_STATE_IDLE -> {
                    Log.e("CALL_STATE", "CALL_STATE_IDLE")
                }
                else -> {
                    Log.e("CALL_STATE", "CALL_STATE_IDLE")
                }
            }
        } catch (ex: Exception) {
            ex.printStackTrace()
        }

    }
}
Manifest.xml

    <receiver android:name=".MyPhoneCallStateReceiver">
        <intent-filter android:priority="989999">
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>
    </receiver>

我还发现,如果呼叫是传入的,它可以正确识别何时触发
call\u STATE\u IDLE
STATE

我错过了什么