Androidシステム8.0以降では、サービスを開くときに「XXアプリケーションが実行中です」という通知を作成する必要があります

バックグラウンド:

Androidシステム8.0以降の場合、サービスを開始するにはstartForegroundService(Intent intent)メソッドを使用する必要があり、対応するサービスをstartForeground(int id、通知通知)に設定する必要があるため、サービスの実行時に常に「」が表示されるように通知を作成する必要があります。 xxは実行中です」同様の通知。

目的:

「xxisrunning」通知コンテンツを削除します

解決:

公式の使用JobServiceにより、JobInfo.Builder対応する需要作成しJOBINFO、によってJobScheduler.schedule(JOBINFO JOBINFO)サービス機能を実装するために

  • Android5.0はJobServiceを起動するため、システム5.0以降のバージョンを使用できます。
  • Android7.0バージョンでは、JobInfo.Builder.setPeriodic(long intervalMillis)を使用して、タスクの実行間隔自由に設定できます。
  • Android7.0以降のシステムバージョンのタスク実行の最小間隔は、JobInfo.getMinPeriodMillis()に制限されています。これは15分です。ただしsetPeriodicの2番目のパラメーター(long intervalMillis、long flexMillis)は、次のタスク実行のウィンドウ時間を設定できます。時間はJobInfo.getMinFlexMillis()(5分)またはタスク間隔時間の5%のいずれか大きい方です。 WHO。具体的なタスクの実行は次のとおりです。

コード例:

JobServiceの例

import android.app.job.JobParameters;
import android.app.job.JobService;
import android.os.Build;
import android.support.annotation.RequiresApi;


/**
 * created by z on 2018/11/19
 * 系统5.0以上使用的服务
 */
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class CowboyJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {

        //此处进行自定义的任务
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        return false;
    }
}

JobServiceは、AndroidManifest.xmlの<application> </ application>タグで宣言されています 

//具体的JobService名字和路径以自己编写的为准
<service
            android:name=".service.CowboyJobService"
            android:permission="android.permission.BIND_JOB_SERVICE" />

 JobServiceの実行を開始します

//开启JobService服务:CowboyJobService.class为上边创建的JobService
    public static void startPollingService(Context context) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(context, CowboyJobService.class));
            builder.setMinimumLatency(0)
                    .setBackoffCriteria(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS, JobInfo.BACKOFF_POLICY_LINEAR);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                builder.setPeriodic(JobInfo.getMinPeriodMillis(), JobInfo.getMinFlexMillis());
            } else {
                builder.setPeriodic(TimeUnit.MINUTES.toMillis(5));
            }

            JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
            if (jobScheduler != null) {
                jobScheduler.schedule(builder.build());
            }

        } else {

            //系统5.0以下的可继续使用Service
        }
    }

 

おすすめ

転載: blog.csdn.net/nsacer/article/details/84629842