1

Android のandroid.intent.action.SCREEN_ONブロードキャストを受信し、バックグラウンドで何かを実行するアプリを作成しています。

(そのブロードキャストは保護されており、マニフェストの IntentFilter セクションに追加できません。 を介してプログラムで登録する必要がありますregisterReceiver())

サービスを開始する方法を知っています。それを開始したアクティビティから独立させる方法を知っています(それで死ぬことはありません)。本当の質問は次のとおりです。

SCREEN_ONブロードキャストレシーバーをサービスに登録して、ブロードキャストがシステムによって送信されたときにRAMが少ないためにサービスがデバイスによって一時的に強制終了された場合でも、サービスによって受信されるようにする方法は?

4

1 に答える 1

1
public class OnBootService extends Service {

   private static final String TAG = OnBootService.class.getSimpleName();
   private PowerButtonReceiver mPowerButtonReceiver = null;

   @Override
   public IBinder onBind(Intent intent) {
        return null;
   }

   @Override
   public int onStartCommand(final Intent intent, final int flags, final int startId) {

    if (mPowerButtonReceiver==null) {
        mPowerButtonReceiver = new PowerButtonReceiver();
        registerReceiver(mPowerButtonReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
    }
    return Service.START_NOT_STICKY;
}

@Override
public void onCreate() {
    super.onCreate();

    Log.i(TAG,"onCreate()");
}

  // unregister the Receiver when the Service gets stopped (destroyed)
@Override
public void onDestroy() {
    super.onDestroy();

    unregisterReceiver(mPowerButtonReceiver);

    Log.i(TAG, ""+TAG+" stopped: "+ new Date().toString());
   }
}

編集:私もpowerButtonReceiverを追加しました:

public class PowerButtonReceiver extends BroadcastReceiver {

   private static final String TAG = "PowerButtonReceiver"; 

   private int mPowerClickCounter = 0;  
   private boolean inTime = true;

   @Override
   public void onReceive(Context context, Intent intent) {
       SharedPreferences sharedPref = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

       Boolean bCheck = sharedPref.getBoolean("PowerButtonReceiverState", false);   

       // check if screen is on
       PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
       Boolean screenOn = pm.isScreenOn();
       Log.i(TAG, "Screen is on:  " + screenOn.toString());
 }}      
于 2013-10-17T09:32:46.840 に答える