Android (대상 25)에서 백그라운드 서비스가 있으며 onCreate 함수에서 전화 상태 수신기를 초기화했습니다. Nougat 이전의 Android 버전에서는 잘 작동하지만 Nougat에서는 권한이 부여 된 경우에도 작동하지 않습니다.Android Nougat PhoneStateListener가 트리거되지 않았습니다.
public class Service extends IntentService
{
class PhoneListener extends PhoneStateListener
{
String TAG = getClass().getName();
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
switch (state)
{
case TelephonyManager.CALL_STATE_IDLE:
Log.d(TAG,"IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(TAG,"OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG,"RINGING");
break;
}
}
}
public Service()
{
super("ChatService");
}
public Service(String name)
{
super(name);
}
@Override
public void onCreate()
{
super.onCreate();
TelephonyManager tm = (TelephonyManager)getApplicationContext().getSystemService(TELEPHONY_SERVICE);
PhoneListener listener = new PhoneListener();
tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);
}
}
문제가 무엇인지 알 수 없으므로 전화 통신 관리자가 등록되지 않았으므로 onCallStateChanged가 트리거되지 않은 것처럼 보입니다. 내 생각 중 하나는 안드로이드 M에서 소개 된 Doze 기능이지만 여전히 "이 코드는"직장에서 전화가 발견되지 않더라도 안드로이드 6에서 잘 작동합니다.