2016-12-05 3 views
1

Ich registriere meine PhoneStateListener in onStartCommand meines Dienstes. Es funktionierte perfekt unter Android N Geräten. Aber manchmal reagiert es nicht in android N-Geräten. Bezieht es sich auf den Doze-Modus? Wenn ja, wie geht man damit um?PhoneStateListener reagiert manchmal nicht in Nougat

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
    CustomPhoneStateListener phoneStateListener = new CustomPhoneStateListener(); 
    telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 

Antwort

0

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!

0

Ich habe eine Lösung gefunden: Eine meiner App hatte das gleiche Problem in Noughat. Während des Debugging habe ich festgestellt, dass der Status Listener nur einmal aufgerufen wird und auch wenn die Aktivität erstellt wird. Sobald ich einen Anruf tätige, geht die Aktivität in den Hintergrund und dort, nachdem der Hörer nie gerufen wurde, folgerte ich, dass der Hörer, den ich in onCreate angeschlossen hatte, losgelöst wird, wenn ich die Aktivität "Attach your State Listener in onResume" verlasse. Dein Problem wird gelöst.

onResume() { 
    PhoneCallListener p = new PhoneCallListener; 
    TelephonyManager t = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 
    t.listen(p,PhoneStateListener.LISTEN_CALL_STATE); 
} 
0

ich dieses Problem hatte und gelöst es nach 2-3 Tagen zu verschwenden mit ermöglicht die App automatisch gestartet unter Einstellungen -> Berechtigungen -> Automatischen Start verwalten

+0

kann keine solche Einstellungen in Nougat finden – PPB

Verwandte Themen