Android使用JobScheduler定期推送本地通知实例代码

Android5.0之后提供了JobService和JobScheduler,用于在稍后的某个时间点或者当满足某个特定的条件时执行一个任务。使用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) //任何有网络的状态 .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" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-07-31 18:20:07

Android使用JobScheduler定期推送本地通知实例代码的相关文章

Android应用中消息推送完美方案分享

1.消息推送基础 消息推送,就是在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术.推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间.它根据用户的兴趣来搜索.过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息 当我们开发需要和服务器交互的移动应用时,基本上都需要和服务器进行交互,包括上传数据到服务器,同时从服务器上获取数据. 一般情况下,客户端与服务器之间通讯客户端是主动的,但这就存在一个问题就是一旦服务器数据有更新或者服务器要下发通知给客户端只能等客户端连接的

在Web微信应用中使用博客园RSS以及Quartz.NET实现博客文章内容的定期推送功能

本篇随笔介绍在Web微信应用中使用博客园RSS以及Quartz.NET实现博客文章内容的定期推送功能,首先对Quartz.NET进行一个简单的介绍和代码分析,掌握对作业调度的处理,然后对博客园RSS内容的处理如何获取,并结合微信消息的群发接口进行内容的发送,从而构建了一个在Web应用中利用作业调度来进行消息发送的业务模型. Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)

Android下实现信息推送

最近有幸负责参与开发公司的CMPP短信网关程序,采用的是Apache Mina框架实现.通过该项目对Socket通 信.长连接有了更深一步的理解,于是就想试试将Mina用到Android平台的信息推送上.经过了解发现,目前 已经有不少成型的框架能够实现Android平台的信息推送,特别是AndroidPn. 平时我们开发手机客户 端,都少不了要于服务器交互,那么当服务器端有新的数据时,客户端是怎么知道的呢?一般可以采用如下两 种方式来实现: 1)客户端定期(每隔一段时间,轮询)向服务器发起请求,

与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息

原文:与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 [索引页][源码下载] 与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之推送通知 推送 Tile 通知 推送自定义信息 示例1.推送 Tile 通知客户端PushTil

与众不同 windows phone (9) - Push Notification(推送通知)之概述, 推送 Toast 通知

原文:与众不同 windows phone (9) - Push Notification(推送通知)之概述, 推送 Toast 通知 [索引页][源码下载] 与众不同 windows phone (9) - Push Notification(推送通知)之概述, 推送 Toast 通知 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之推送通知 概述 推送 Toast 通知 示例1.概述Summary.xaml <phone:PhoneApplica

Android实现几种推送方式解决方案

本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识: 在移动互联网时代以前的手机,如果有事情发

win8.1关闭不接收升级win10推送升级通知的方法

  win8.1关闭不接收升级win10推送升级通知的方法.微软会向win8.1操作系统推送升级win10通知,有时候点击错误,系统莫名其妙就变成win10了 ,非常烦人,还要重新恢复系统.那么有什么方法可以让win8.1关闭不接收升级win10推送升级通知呢?下面小编和大家分享win8.1关闭不接收升级win10推送升级通知的方法. 具体步骤: 1.按下"Win+X"组合键呼出系统快捷菜单,点击"控制面板"; 2.将控制面板的查看方式修改为"大图标&qu

azure的servicebus怎么对特定设备推送IOS通知?

问题描述 azure的servicebus怎么对特定设备推送IOS通知? azure的servicebus怎么对特定设备推送IOS通知? 解决方案 不同的设备分类,传递消息的时候附加分类id,每种设备只处理自己感兴趣的分类.

显示-百度云推送的通知的问题

问题描述 百度云推送的通知的问题 百度云推送的通知,在模拟器上调试可以接收到,但是换成真机调试就显示不出来.拦截服务已经关闭.望大神给点指点,最近急用 解决方案 解决方案二: 查查真机通知的设置,还有是否安装了安全软件? 解决方案三: 是不是被防火墙等拦截了 解决方案四: 真机是用WIFI网络还是移动网络,是不是禁止通知了?不行就打印一下日志,看到底是执行到哪一步出错了. 解决方案五: 应该是权限的问题,授个root权限试试