2016-10-31 6 views
0

Я разрабатываю приложение, которое должно отображать мечту в особых обстоятельствах, Я искал везде, чтобы найти подходящий способ начать мой сервис дневного пребывания через мой класс MainActivity без везения,Правильный способ запуска и остановки службы DayDream от активности

В настоящее время я использую следующий код, чтобы начать мечту, и на самом деле это работает, но мне нужно лучшее решение, которое предоставляет мне способ остановить мечту.

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 */ } 
} 

ответ

0

Я начинаю его таким же образом, но я не нашел никакого официального способа или намерения остановить мечту.

Однако вы можете остановить мечту, восстановив фокус своей деятельностью. Для этого создайте службу и отправьте любое намерение от вашего сервиса к вашей деятельности, когда вы хотите остановить мечту. В качестве побочного эффекта ваша деятельность будет на фронте, когда вы получите намерение, если оно будет в фоновом режиме. Этот подход работает как минимум на Android 4.4 до 5.1.

Для Android 6 достаточно симулировать пробуждение, чтобы прекратить мечтать.

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();