2013-04-10 31 views
1

屏幕我有一個廣播接收器:安卓:廣播接收器通過代碼知道什麼時候在開/關

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 2013-04-10 17:05:26

回答

0

最有可能的是,當您的應用進入後臺時,Android會殺死它以釋放資源。從您的活動中嘗試starting a foreground service attached to an ongoing notification,並在其中註冊BroadcastReceiver。

+0

我試着將它添加到服務: 公共類KillVPNService延伸服務{ \t ScreenReceiver mReceiver; \t public void onCreate(){ super.onCreate();IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); \t filter.addAction(Intent.ACTION_SCREEN_OFF); \t mReceiver = new ScreenReceiver(); \t registerReceiver(mReceiver,filter); } @Override \t public IBinder onBind(Intent intent){ return null; }} 和我的活動: startService(新意圖(這一點,KillVPNService.class)); 但我沒有解決問題... – user1071138 2013-04-11 13:50:58

+1

通過正確地將此服務添加到清單解決! – user1071138 2013-04-11 14:24:07