Android中如何利用JobScheduler定期推送本地通知
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍了Android中如何利用JobScheduler定期推送本地通知的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中如何利用JobSchedu
千家信息网最后更新 2025年01月19日Android中如何利用JobScheduler定期推送本地通知
这篇文章主要介绍了Android中如何利用JobScheduler定期推送本地通知的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中如何利用JobScheduler定期推送本地通知文章都会有所收获,下面我们一起来看看吧。
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和申请相关的权限:
关于"Android中如何利用JobScheduler定期推送本地通知"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Android中如何利用JobScheduler定期推送本地通知"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
推送
时间
用户
内容
知识
看吧
篇文章
上代
不用
代表
价值
任务
单位
小时
废话
情况
操作简单
文章
易懂
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
泰安ios软件开发外包公司
什么是时空数据库
喋血复仇什么服务器人多
慧通网络技术有限公司
互联网高科技办公室装修图片
服务器分配资源的方式
昌平区网络技术服务采购
迁安企业网络技术创造辉煌
互联网科技公司后缀
如何用公式筛选有效数据库
互联网巨头与科技公司
福州康乐网络技术
目前正宗的互联网加科技股
等微信显示服务器繁忙
神武服务器人数
海康威视虚拟服务器
ubuntu架设服务器
剑侠世界选不了服务器
会计数据库应用技术答案
莆田戴尔服务器质量材质上乘
电脑软件开发招工
八路服务器
服务器变软路由
北京网络安全教育培训
双至强e5的服务器
医疗行业网络安全建设方案
我的世界多人服务器地址
电脑无法访问另一台数据库
软件开发简历项目责任描述
长宁区管理网络技术服务哪家好