2016-10-31 3 views
0

Ich entwickle eine Anwendung, die einen Tagtraum in besonderen Umständen anzeigen sollte, Ich suchte überall nach einem geeigneten Weg, meine DayDream-Service durch meine MainActivity-Klasse ohne Glück zu starten,Proper Weg zum Starten und Stoppen DayDream-Service von Aktivität

Momentan benutze ich folgenden Code, um Daydream zu starten und tatsächlich funktioniert es, aber ich brauche eine bessere Lösung, die mir eine Möglichkeit bietet, den Tagtraum zu stoppen.

public void startDayDream(){ 
    final Intent intent = new Intent(Intent.ACTION_MAIN); 
    try { 
     // Somnabulator is undocumented--may be removed in a future version... 
     intent.setClassName("com.android.systemui", 
       "com.android.systemui.Somnambulator"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(intent); 
    } catch (Exception e) { /* Do nothing */ } 
} 

Antwort

0

Ich beginne es auf die gleiche Weise, aber ich habe keine offizielle Möglichkeit oder Absicht gefunden, den Tagtraum zu stoppen.

Sie können jedoch den Tagtraum stoppen, indem Sie den Fokus durch Ihre Aktivität wiedergewinnen. Zu diesem Zweck erstellen Sie einen Service und senden Sie jede Absicht Ihres Service an Ihre Aktivität, wenn Sie Daydream stoppen möchten. Als Nebeneffekt wird Ihre Aktivität in den Vordergrund treten, wenn Sie eine Absicht erhalten, wenn sie im Hintergrund war. Dieser Ansatz funktioniert für mindestens Android 4.4 bis 5.1.

Für Android 6 genügt es, ein Aufwachen zu simulieren, um nicht mehr zu träumen.

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "WakeUpLock"); 
    if (wakeLock.isHeld()) 
     wakeLock.release(); 
    wakeLock.acquire(); 
    wakeLock.release(); 
Verwandte Themen