Ich hatte dieses Problem auch eine PhoneStateListener in Dienst auszuführen versucht, und es scheint, wie es auf N-Geräten nur ‚drop‘ nur tun würde.
Ich habe viele verschiedene Vorschläge ausprobiert, aber ich verlor immer den Hörer auf meinem nexus5x mit 7.0. Die Art und Weise, wie ich es zu 100% am Leben halten konnte, bestand darin, dass der Dienst eine Vordergrundbenachrichtigung ausführen ließ. Grundsätzlich bleibt es in der Benachrichtigungsleiste am Leben, solange der Dienst aktiv ist. Dies hält meinen Dienst durch verschiedene Telefonzustände aufrecht, in denen er den Hörer vorher fallen lassen würde, beispielsweise wenn ein abgehender Anruf beantwortet wurde. Solange Sie keinen Signalton oder Vibrationsalarm für den Benachrichtigungsersteller festlegen, ist dies kaum bemerkbar. Meine Leistungen onCreate wie folgt aussieht:
MyPhoneListener phoneStateListener = new MyPhoneListener(getApplicationContext());
TelephonyManager telephonymanager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
telephonymanager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
Intent notificationIntent = new Intent(this, YourActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_favorites) //status bar icon
.setContentTitle("Title") //whatever title
.setContentText("Stuff") //main notification text
.setContentIntent(pendingIntent).build();
startForeground(12345, notification);
und entfernen Sie die Meldung in der onDestroy des Dienstes:
@Override
public void onDestroy() {
Log.i("log", "service ending");
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.cancel(12345);
}
hoffe, das hilft!
kann keine solche Einstellungen in Nougat finden – PPB