国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android使用JobScheduler定期推送本地通知實例代碼

2019-12-12 02:34:00
字體:
來源:轉載
供稿:網友

Android5.0之后提供了JobService和JobScheduler,用于在稍后的某個時間點或者當滿足某個特定的條件時執行一個任務。使用JobScheduler,我們可以在用戶一段時間沒有使用我們的app的情況下,推送本地通知來提高app的用戶留存率。廢話不多說,上代碼:

先在app的MainActivity啟動時用JobScheduler來schedule一個job。注意在onCreate中我們把用戶啟動app的時間記錄在了shared preference里面:

@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  sharedPreferences.edit().putLong(Constants.SP_PARAM_LAST_LAUNCH, System.currentTimeMillis()).apply();  scheduleNotifications();}private void scheduleNotifications() {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {      try {        JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);        JobInfo jobInfo = new JobInfo.Builder(1, new ComponentName(getPackageName(), NotificationService.class.getName()))            .setRequiresCharging(false)            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) //任何有網絡的狀態            .setPersisted(true) //系統重啟后保留job            .setPeriodic(1000 * 60 * 60 * 24) //這里的單位是毫秒,1000 * 60 * 60 * 24代表一天(24小時)            .build();        jobScheduler.schedule(jobInfo);      } catch (Exception ex) {        Log.e("scheduleNotifications failure");      }    }  }

然后是推送通知的NotificationService,這里SharedPreferences是用的dagger2依賴注入,不用dagger的可以直接用PreferenceManager.getDefaultSharedPreferences來獲得:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)public class NotificationService extends JobService {  @DefaultSharedPref  @Inject  SharedPreferences sharedPreferences;  @Override  public boolean onStartJob(JobParameters params) {    try {      long lastLaunchTime = sharedPreferences.getLong(Constants.SP_PARAM_LAST_LAUNCH, -1);      if(lastLaunchTime > 0) {        long intervalSinceLastLaunch = System.currentTimeMillis() - lastLaunchTime;        //檢查距離用戶上一次啟動app是否過了一定時間        if(intervalSinceLastLaunch > 1000 * 60 * 60 * 24) {              NotificationCompat.Builder mBuilder =                  new NotificationCompat.Builder(NotificationService.this)                      .setAutoCancel(true)                      .setSmallIcon(R.mipmap.ic_launcher)                      .setContentTitle("我的app")                      .setContentText("又有新的內容上線了,快來我們app看看吧!");              Intent resultIntent = new Intent(NotificationService.this, MainActivity.class);              TaskStackBuilder stackBuilder = TaskStackBuilder.create(NotificationService.this);              stackBuilder.addParentStack(MainActivity.class);              stackBuilder.addNextIntent(resultIntent);              PendingIntent resultPendingIntent =                  stackBuilder.getPendingIntent(                      0,                      PendingIntent.FLAG_UPDATE_CURRENT                  );              mBuilder.setContentIntent(resultPendingIntent);              NotificationManager mNotificationManager =                  (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);              mNotificationManager.notify(1, mBuilder.build());        }      }    } catch (Exception ex) {      Log.e("Exception in NotificationService onStartJob");    }    return false;  }  @Override  public boolean onStopJob(JobParameters params) {    Log.d("NotificationService onStopJob");    return true;  }}

最后需要在Manifest中注冊我們的service和申請相關的權限:

  <uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  <service android:name=".NotificationService"      android:permission="android.permission.BIND_JOB_SERVICE" />

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高邮市| 惠东县| 澄城县| 常德市| 分宜县| 隆回县| 桓仁| 桓台县| 吉林省| 潼南县| 华阴市| 长葛市| 沁阳市| 洱源县| 彩票| 台中市| 林州市| 黑龙江省| 军事| 晋江市| 平利县| 山东省| 潮州市| 台中市| 姚安县| 措勤县| 马公市| 阳泉市| 桐城市| 长宁区| 中阳县| 伊金霍洛旗| 都兰县| 澄江县| 县级市| 来宾市| 通州区| 翁牛特旗| 蓝山县| 禄丰县| 永顺县|