レシーバーを作成するために、古いプロジェクトで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();
}
}
次のようにコードを書き直すことができます。
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パーミッションを要求する必要があることを意味します。
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;
}
}
デモの場合、確認