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

首頁 > 系統 > Android > 正文

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

2019-10-22 18:33:13
字體:
來源:轉載
供稿:網友

?android/95450.html">android/213224.html">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" />

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深圳市| 吉林市| 徐水县| 华亭县| 布尔津县| 楚雄市| 洪江市| 江川县| 财经| 临沭县| 徐水县| 澳门| 察哈| 景德镇市| 南投市| 南和县| 华容县| 阿拉善左旗| 启东市| 五常市| 资阳市| 新昌县| 温泉县| 林甸县| 临高县| 永清县| 农安县| 嘉定区| 黑龙江省| 阿鲁科尔沁旗| 柘荣县| 武平县| 淮北市| 广灵县| 类乌齐县| 合川市| 湘乡市| 阿图什市| 南昌县| 黑河市| 高雄市|