web-dev-qa-db-ja.com

WakefulBroadcastReceiverは廃止されました

レシーバーを作成するために、古いプロジェクトでWakefulBroadcastReceiverを拡張しています。しかし、今はdeprecatedです。 WakefulBroadcastReceiver which Receiverの代わりに、今使用し、新しいメソッドで以下のコードを変換する方法は?

ここに私のコードがあります:

 public class TaskFinishReceiver extends WakefulBroadcastReceiver {
    private PowerManager mPowerManager;
    private PowerManager.WakeLock mWakeLock;
    @Override
    public void onReceive(Context context, Intent intent) {
        mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        turnOnScreen();
        Intent wakeIntent = new Intent();

        wakeIntent.setClassName("com.packagename", "com.packagename.activity.TaskFinished");
        wakeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(wakeIntent);
    }


    public void turnOnScreen(){
        mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
        mWakeLock.acquire();
    }
}
16
Yeahia2508

次のようにコードを書き直すことができます。

    public class TaskFinishReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            //do your stuff in the JobIntentService class
            MyJobIntentService.enqueueWork(context, intent);
        }
    }

ドキュメントによると、新しい JobIntentService クラスがウェイクロックと下位互換性の両方を処理するため、これは機能します。

このクラスを使用する場合、WakefulBroadcastReceiverを使用する必要はありません。 Android Oで実行すると、JobSchedulerはウェイクロックを処理します(作業をキューに登録してからジョブがディスパッチされるまで、実行中にウェイクロックを保持します)。プラットフォームの以前のバージョンで実行されている場合、このウェイクロック処理は、PowerManagerを直接呼び出すことにより、ここでクラスでエミュレートされます;これは、アプリケーションがWAKE_LOCKパーミッションを要求する必要があることを意味します。

8
Bolling

WakefulBroadcastReceiver 廃止予定 APIレベル26.1.0

Android Oの場合、バックグラウンドチェックの制限により、このクラスは一般的に有用ではなくなります。この時点でアプリがフォアグラウンドにあり、そうすることを許可されていることを確認してください。)代わりに、開発者は Android.app.job.JobScheduler ジョブをスケジュールします。これにより、アプリがウェイクロックを保持する必要がなくなります(システムがジョブのウェイクロックを保持します)。

public class JobSchedulerService extends JobService {

    @Override
    public boolean onStartJob(JobParameters params) {

        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {

        return false;
    }

}

デモの場合、確認

6
IntelliJ Amiya