2016-11-10 2 views
0

Ich habe einen Dienst (für die Erkennung eingehende und ausgehende Anrufe), die der Benutzer in meiner Anwendung starten und stoppen kann; Der Dienst kann auch starten, wenn das Gerät neu gestartet wird.Halten Android-Service bewusst, nicht wach

Jetzt bin ich auf einer Situation, wo der Dienst nicht "wach" ist, wenn das Gerät schläft; und wenn ein Anruf empfangen wird, ist der Dienst noch nicht wach, um diesen eingehenden Anruf zu bearbeiten.

Meine Frage ist, wie ich meinen Dienst auf diesen Zustand aufmerksam machen kann, ohne dafür ein Wakelock zu halten?
Wenn der Wakelock der einzige Weg ist, dies zu lösen, was sollte dann die beste Implementierung sein?

+0

Halten Sie Ihren Dienst nicht nur zum Erfassen von Anrufereignissen. Registrieren Sie einen Empfänger und machen Sie, was Sie wollen, in 'onReceive()'. –

Antwort

0

hinzufügen in manifest:

<uses-permission android:name="android.permission.WAKE_LOCK"/> 

Jetzt in Ihrem Service:

PowerManager powerManager; 
PowerManager.WakeLock wakeLock; 

@Override 
    public void onCreate() { 
     super.onCreate(); 
     powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
     wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "NOTIFY"); 

    } 

jetzt,

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     wakeLock.acquire(); 
     handleSERVICE(intent); 
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     wakeLock.release(); 
    } 
+0

Dies ist, was ich an erster Stelle gesehen habe und fragte mich, ob die "PARTIAL_WAKE_LOCK" die bessere Wahl als wakelock Ebene ist, Dokumentation heißt: "Wenn Sie eine partielle Wecksperre halten, wird die CPU weiter laufen, unabhängig von Anzeige Timeouts oder der Zustand des Bildschirms und auch nachdem der Benutzer den Netzschalter gedrückt hat. Bei allen anderen Wakelocks läuft die CPU, aber der Benutzer kann das Gerät immer noch mit dem Netzschalter in den Ruhezustand versetzen. Ich werde das versuchen und dich bemerken, danke. – Anas

+0

Es wird benötigt, weil bis zu Ihrer Arbeit der Service nicht beendet werden kann. Nach der Arbeit wecken Protokoll-Releases. –

+0

Ich stimme tatsächlich mit Ihnen überein und fand nichts anderes passender, außerdem haben neue Geräte Näherungssensoren, die den Bildschirm ausschalten, wenn wir das Telefon zu den Ohren nehmen; Vermeidung von Verwirrungen Ihre Antwort ist die Art, wie ich gehe und werde es bald testen, nachdem ich selbst schlafen gehen.thank tou – Anas

1

Sie diese Berechtigungen zu Ihrem Manifest hinzufügen können, und machen BroadcastReceiver für zuhören Bei eingehenden Anrufen und innerhalb des Empfängers sollten Sie Ihren Dienst starten

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 

<!--This part is inside the application--> 
    <receiver android:name=".CallReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     </intent-filter> 
    </receiver> 
+0

Ich implementierte diese INSIDE bereits den Dienst, der eingehende/ausgehende Anrufe überwacht, ohne dass meine Anwendung ausgeführt wird, ich dachte eher über einen ähnlichen Ansatz nach, ohne Ergebnis, das System (ich denke) behandelt empfangene Anrufe als Priorität, der Dienst ist danach geladen. – Anas

Verwandte Themen