2015-05-07 2 views
2

Мне нужна служба для обработки события, когда экран выключен, например, получение отложенных сообщений (с помощью Handler) и изменение состояния подключения к Интернету.Получать событие и намерение пока экран выключен на Android

Возможно ли, что служба может получить этот сигнал без постоянного использования PARTIAL_WAKE_LOCK, так как мне не нужна услуга для работы все время?

+2

Вы должны 'BroadcastReceivers' получить различные состояния http://developer.android.com/reference/android/content/BroadcastReceiver.html –

+0

@JibranKhan Я хотел бы предложить вам, чтобы сделать ответ ваш комментарий, потому что это правильно – Chaosit

+0

@ Chaosit, позвольте мне :) –

ответ

1

Вам нужны BroadcastReceivers для получения разных состояний. Обратитесь к Android документации для получения дополнительной информации

http://developer.android.com/reference/android/content/BroadcastReceiver.html

Также, например, вы можете обратиться здесь https://www.grokkingandroid.com/android-getting-notified-of-connectivity-changes/ Некоторые фрагмент из примера ссылки при условии

registerReceiver(
     new ConnectivityChangeReceiver(), 
     new IntentFilter(
      ConnectivityManager.CONNECTIVITY_ACTION)); 

BroadcastReceiver реализации

public class ConnectivityChangeReceiver 
       extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     debugIntent(intent, "grokkingandroid"); 
    } 

    private void debugIntent(Intent intent, String tag) { 
     Log.v(tag, "action: " + intent.getAction()); 
     Log.v(tag, "component: " + intent.getComponent()); 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
     for (String key: extras.keySet()) { 
      Log.v(tag, "key [" + key + "]: " + 
       extras.get(key)); 
     } 
     } 
     else { 
     Log.v(tag, "no extras"); 
     } 
    } 

} 

As StenSoft предположил, что вы можете использовать AlarmManager для задержки d или любую другую задачу планирования. Я использовал следующий пример и его работу

public class Alarm extends BroadcastReceiver 
{  
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
     wl.acquire(); 

     // Put here YOUR code. 
     Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

     wl.release(); 
    } 

    public void SetAlarm(Context context) 
    { 
     AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, Alarm.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute 
    } 
} 
+0

Вы имеете в виду, что простой приемник все еще выполняет работу, даже когда экран выключен, и никакой блокировки бодрствования не используется? Это удобно. Какой обработчик habout и задержанные сообщения (если я хочу сделать что-нибудь через 5 минут после, например)? – Laetan

+0

Если вы хотите, чтобы некоторые вещи были сделаны через определенное время, и вы хотите оптимизировать свое обслуживание, то мое мнение заключается в использовании «IntentService», и, как было предложено StenSoft, вы также можете использовать службы будильника. –

+0

. Я не знаю, был ли я достаточно ясен , но мне нужно, чтобы все работы, сделанные после события, были тихими. Я имею в виду, что экран не работает, пользователь не знает, что что-то происходит. Если сигнал тревоги подобен временному PARTIAL_WAKE, все в порядке. – Laetan

1

Для отсроченных сообщений используйте alarm.

Для изменения связи в Интернете на фоне используйте WakefulBroadcastReceiver.

+0

Тревога, похоже, «разбудит устройство», если он спит. Включает ли он экран? И в документации говорится, что WakefulBroadcastRecivei получает «события пробуждения устройства». Означает ли это событие, например ACTION_SCREEN_ON и OFF? Потому что это не то, что мне нужно. – Laetan

+0

@ Laetan Нет, ни тревожный, ни бодрствовавший вещательный приемник не включили экран, они просто разбудят устройство, чтобы ваш код мог работать. Затем ваш код может [включить экран] (https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON), ​​если он захочет. – StenSoft

Смежные вопросы