2013-04-10 1 views
1

Я приемник вещания:Android: BroadcastReceiver знать с помощью кода, когда экран вкл/выкл

public class ScreenReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 

      //Do something 

     } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 

      Intent start=new Intent(context,MainActivity.class); 
     context.startActivity(start); 
     } 
    } 
} 

И, в моей деятельности, в OnCreate():

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
filter.addAction(Intent.ACTION_SCREEN_OFF); 
ScreenReceiver mReceiver=new ScreenReceiver(); 
registerReceiver(mReceiver, filter); 

проблема в том, что когда отображается моя активность, приемник правильно выполняет действие, но когда он находится в фоновом режиме, иногда ничего не происходит.

В чем может быть проблема?

+0

Смотрите ответ на этот пост тоже: http://stackoverflow.com/questions/7890363/broadcastreceiver-and-paused-activity – Trinimon

ответ

0

Скорее всего, когда ваше приложение попадает в фоновый режим, Android убивает его, чтобы освободить ресурсы. Попробуйте starting a foreground service attached to an ongoing notification из вашей деятельности и зарегистрируйте BroadcastReceiver.

+0

Я пытался добавить его в сервис: общественного класса KillVPNService проходит службу { \t ScreenReceiver mReceiver; \t public void onCreate() { super.onCreate(); Фильтр IntentFilter = новый IntentFilter (Intent.ACTION_SCREEN_ON); \t filter.addAction (Intent.ACTION_SCREEN_OFF); \t mReceiver = новый ScreenReceiver(); \t registerReceiver (mReceiver, filter); } @Override \t общественный IBinder onBind (намерение намерения) { return null; } } и в моей деятельности: startService (новое намерение (это, KillVPNService.class)); Но я не решил проблему ... – user1071138

+1

Решенный путем правильного добавления этой службы в манифест! – user1071138

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