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をターゲットにしています。私の大きなアプリでは、主なアクティビティと長年のサービスの両方にコードを貼り付け、状態変更イベントを取得しません。私はアンドロイド< 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の上に、 呼び出し、(オフフック) プレス切断、(実際のデバイスまたはエミュレーター上で) あなたはそれが十分に速く行う場合 - あなたは、短いビープ音に耳を傾けるならば、すべてが 、OKになりますリスナーが死んでもう反応しません。 シンプルプーリング(RxJava)で問題を回避しました。 – tim4dev