17

BroadcastReceiver着信通話の発信者 ID を取得するために、次のコードを使用しています。

@Override
public void onReceive(Context aContext, Intent aIntent) {
   String action = aIntent.getAction();

   if (action==null) return;
   if (!action.equals("android.intent.action.PHONE_STATE")) return;

   String curState = aIntent.getStringExtra(TelephonyManager.EXTRA_STATE);

   if ((TelephonyManager.EXTRA_STATE_RINGING.equals(curState))
      &&(TelephonyManager.EXTRA_STATE_IDLE.equals(oldState)))){
      String incNumber = aIntent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

      // do something here
   }
   oldState=curState;
}

残念ながら、これは では機能しなくなりましたAndroid 9.0 (API 28)。具体的には、 aIntent.getStringExtra(EXTRA_INCOMING_NUMBER)常に null を返します。アンドロイドversions<=API 27ではすべてが正しく動作します

また、マニフェスト ファイルに と のアクセス許可をREAD_PHONE_STATE追加しました。READ_CALL_LOG

何か案は?他の誰かが同じ問題を経験していますか?

よろしくお願いします。

4

2 に答える 2