2
我做了一個示例應用程序和PhoneStateListenerTelephonyManager的PhoneStateListener不叫上牛軋糖
TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //TelephonyManager object
telephony.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
Log.i("brian", "call state = " + state + " incoming number " + incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE); //Register our listener with TelephonyManager
Log.i("brian", "READ_PHONE_STATE = " + ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE));
正常工作,但是當我在上面的代碼添加到我的更大的應用onCallStateChanged只有當它被稱爲最初訂閱。沒有電話狀態變化通知給我。在這兩個項目的底部日誌行「READ_PHONE_STATE =」總是被授予,我的目標是sdk 22,所以我認爲沒有運行時權限。在我的大型應用程序中,我將代碼粘貼到主要活動和長期服務中,但都沒有得到狀態更改事件。他們都工作,當我運行我的代碼上的一個android < 7.0,我不知道爲什麼。在警告或錯誤日誌中看不到任何實質性內容。
你有沒有取得任何進展?我其實有類似的問題。在7.1版本的仿真器中,按預期工作,但我有用戶報告未在其Pixel設備上調用偵聽器的數量。如果我有任何進展,我會發布。 – Pinsickle
@Pinsickle我最終做的只是使用廣播接收方法而不是註冊偵聽器。 – L7ColWinters
我有類似的問題。 我的targetSdkVersion 26,我請求所有權限。 我想包裝一個監聽器到Observable(RxJava)。 完整測試在這裏https://github.com/tim4dev/dirty_code/tree/master/Rx-Listener-to-Observable 在Android 4.2上工作正常。 在Android 8.0上調用2--3次而死亡。 重現步驟: 運行的應用程序在Android 8(在實際設備或仿真器), 通話, 按斷開(摘), 如果你這樣做不夠快 - 一切都會好的, 如果你聽短的蜂鳴聲等待,聽衆死亡,不再有任何反應。 我通過簡單池(RxJava)避免了這個問題。 – tim4dev