4

放送受信機でインテントを受信して​​から、サービスを開始してさらに作業を行います。デバイスがスリープ状態でこれが発生した場合、Wakelock(AlarmManger?)を取得する必要がありますか?また、なぜそれが必要なのですか?デバイスがウェイクロックを取得せずにスリープ状態になると、サービスの実行が停止しますか?

4

3 に答える 3

5

デバイスがスリープ状態でこれが発生した場合、Wakelock(AlarmManger?)を取得する必要がありますか?また、なぜそれが必要なのですか?

そもそもデバイスがスリープ状態の場合、デバイスがスリープ状態であるため、「ブロードキャストレシーバーでインテントを受信」することはありません。

Wakelock(AlarmManger?)を入手する必要がありますか?なぜそれが必要なのですか?

作業を完了している間、デバイスの実行を維持したい場合を除いて、「必要」はありません。

デバイスがウェイクロックを取得せずにスリープ状態になると、サービスの実行が停止しますか?

はい。

于 2011-04-15T19:07:01.567 に答える
1

AndroidのネイティブWakefulBroadcastReceiverはあなたにとって完璧なソリューションになるようです。通常のBroadcastReceiverではなくこれを拡張し、 onReceive()で「ウェイクフル」な方法でサービスを開始する必要があります。

startWakefulService(context, service);

サービスのonHandleIntent()で作業が完了したことを通知し、

MyWakefulReceiver.completeWakefulIntent(intent);
于 2016-08-24T10:26:21.967 に答える
0
public class WakeLockManager extends BroadcastReceiver {

    private static WakeLock mWakeLock;
    private String LCLT;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Consts.WAKELOCK_INTENT)) {
            Log.v("wakelock", "GOT THE wakelock INTENT");
            boolean on = intent.getExtras().getBoolean("on");
            if (mWakeLock == null) {
                PowerManager pm = (PowerManager) context
                        .getSystemService(Context.POWER_SERVICE);
                mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                        "Breeze WakeLock");
            }
            if (on) {
                if (!mWakeLock.isHeld()) {
                    mWakeLock.acquire();
                    Log.v("wakelock", "acquiring wakelock");
                }
            } else {
                if (mWakeLock.isHeld()) {
                    Log.v("wakelock", "releasing wakelock");
                    mWakeLock.release();
                }
                mWakeLock = null;
            }
        }
    }
}

上記のコードを見てください..別のクラスファイルに入れて、マニフェストでカスタムインテント用に定義してください....このクラスがカスタムインテントに応答するようになりました...そのインテントをブロードキャストするだけで、ターンできますウェイクロックは静的であるため、アプリ全体でウェイクロックがオンまたはオフになります。次のようになります。

public void setWakeup(boolean status) {
    Intent wakelock_Intent = new Intent(CUSTOM_INTENT);
    wakelock_Intent.putExtra("on", status);
    this.sendBroadcast(wakelock_Intent);
}

上記はalarmmanagerコードで定義されるため、呼び出しがスケジュールされます

于 2012-08-10T13:14:03.880 に答える