В Android (цель 25) у меня есть фоновая служба, и в функции onCreate я инициализировал прослушиватель состояния телефона. Он отлично работает на версиях Android до Nougat, но в Nougat он не работает, даже если разрешения предоставлены.
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 не срабатывает. Одно из моих предположений - это функция Doze, которая была представлена на Android M, но все же.. этот код отлично работает на Android 6, даже когда телефон не находится «в работе».