Так вот мой код, который работал и в Android Nougat:
roid (цель 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, даже если телефон не находится "в работе"