最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年06月30日 11:56:53   作者:碼農(nóng)向前沖  
本篇文章主要介紹了Android使用JobScheduler定期推送本地通知實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

@Override
protected 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) //任何有網(wǎng)絡的狀態(tài)
            .setPersisted(true) //系統(tǒng)重啟后保留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("又有新的內(nèi)容上線了,快來我們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" />

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android音頻開發(fā)之音頻采集的實現(xiàn)示例

    Android音頻開發(fā)之音頻采集的實現(xiàn)示例

    本篇文章主要介紹了Android音頻開發(fā)之音頻采集的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • android圖像繪制(六)獲取本地圖片或拍照圖片等圖片資源

    android圖像繪制(六)獲取本地圖片或拍照圖片等圖片資源

    從SD卡中獲取圖片資源,或者拍一張新的圖片,然后再進行處理(直接處理返回圖片/獲得圖片的地址再處理)接下來為您詳細介紹,感興趣的朋友可以了解下
    2013-01-01
  • Android使用xml文件資源定義菜單實現(xiàn)方法示例

    Android使用xml文件資源定義菜單實現(xiàn)方法示例

    這篇文章主要介紹了Android使用xml文件資源定義菜單實現(xiàn)方法,結合實例形式分析了Android資源文件管理及xml配置自定義菜單相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • 詳解Android中Intent傳遞對象給Activity的方法

    詳解Android中Intent傳遞對象給Activity的方法

    這篇文章主要介紹了Android中Intent傳遞對象給Activity的方法,文章中對Activity的生命周期等知識先作了簡要的介紹,需要的朋友可以參考下
    2016-04-04
  • Android布局居中的幾種做法

    Android布局居中的幾種做法

    這篇文章主要介紹了Android布局居中的幾種做法的相關資料,需要的朋友可以參考下
    2016-09-09
  • Android畫中畫窗口開啟方法

    Android畫中畫窗口開啟方法

    Android8.0 Oreo(API Level26)允許活動啟動畫中畫Picture-in-picture(PIP)模式。PIP是一種特殊類型的多窗口模式,主要用于視頻播放。PIP模式已經(jīng)可用于Android TV,而Android8.0則讓該功能可進一步用于其他Android設備
    2023-01-01
  • Android中Service服務詳解(二)

    Android中Service服務詳解(二)

    這篇文章主要介紹了Android中Service服務,在前面一篇的基礎上進一步分析了Android Service的綁定服務與解綁服務的相關使用技巧,需要的朋友可以參考下
    2016-01-01
  • Android開發(fā)之menu菜單

    Android開發(fā)之menu菜單

    Android系統(tǒng)里面有四種類型的菜單:options menu(選項菜單),context menu(上下文菜單),sub menu(子菜單),Popup menu(彈出菜單),本文給大家詳解android開發(fā)之menu菜單,感興趣的朋友一起學習吧
    2015-11-11
  • Android WebView或手機瀏覽器打開連接問題解決辦法總結

    Android WebView或手機瀏覽器打開連接問題解決辦法總結

    這篇文章主要介紹了Android WebView或手機瀏覽器打開連接問題解決辦法總結的相關資料,需要的朋友可以參考下
    2017-03-03
  • 使用RecyclerView實現(xiàn)瀑布流高度自適應

    使用RecyclerView實現(xiàn)瀑布流高度自適應

    這篇文章主要為大家詳細介紹了使用RecyclerView實現(xiàn)瀑布流高度自適應,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

逊克县| 聂拉木县| 嘉荫县| 景泰县| 安溪县| 临沭县| 宽甸| 米脂县| 高陵县| 宽甸| 金阳县| 平潭县| 南昌市| 西宁市| 罗田县| 安国市| 延长县| 寿阳县| 兴山县| 彭阳县| 老河口市| 武宁县| 伊金霍洛旗| 怀柔区| 墨竹工卡县| 崇明县| 邵武市| 贵港市| 靖州| 启东市| 婺源县| 房山区| 乌什县| 香河县| 中卫市| 师宗县| 仁寿县| 綦江县| 东方市| 庆元县| 瑞金市|