android后台服务定时通知

android后台服务定时通知
最近有个项⽬的要求是在程序退出之后,任然可以每天定时发通知,我们可以想下,其实就是后台开⼀个服务,然后时间到了就发下通知。
1.⾸先我们需要⽤到Service类。
ap劫
先上代码在慢慢解释
ample.androidnotification;
2无菌检查薄膜过滤器
3import java.util.Timer;
4import java.util.TimerTask;
5import android.app.Notification;
6import android.app.NotificationManager;
7import android.app.PendingIntent;
8import android.app.Service;
t.Intent;
10import android.os.IBinder;
11import android.util.Log;
12
13public class PushService extends Service {
14
15static Timer timer = null;
16//清除通知
17public static void cleanAllNotification() {
18        NotificationManager mn= (NotificationManager) Context().getSystemService(NOTIFICATION_SERVICE);
19        mn.cancelAll();
20if (timer != null) {
21            timer.cancel();
22            timer = null;
23        }
24    }
25
26//添加通知
27public static void addNotification(int delayTime,String tickerText,String contentTitle,String contentText)
28    {
29        Intent intent = new Context(), PushService.class);
30        intent.putExtra("delayTime", delayTime);
31        intent.putExtra("tickerText", tickerText);
32        intent.putExtra("contentTitle", contentTitle);
33        intent.putExtra("contentText", contentText);
34        Context().startService(intent);
35    }
36
37public void onCreate() {
38        Log.e("addNotification", "===========create=======");
39    }
40
41    @Override
42public IBinder onBind(Intent arg0) {
单宁酶
43// TODO Auto-generated method stub
捕鱼网具
44return null;
45    }
46
47public int onStartCommand(final Intent intent, int flags, int startId) {
48
49long period = 24*60*60*1000; //24⼩时⼀个周期
50int IntExtra("delayTime",0);
51if (null == timer ) {
52            timer = new Timer();
53        }
54        timer.schedule(new TimerTask() {
55
56            @Override
57public void run() {
58// TODO Auto-generated method stub
59                NotificationManager mn= (NotificationManager) SystemService(NOTIFICATION_SERVICE);
60                Notification.Builder builder = new Notification.Builder(PushService.this);
61                Intent notificationIntent = new Intent(PushService.this,MainActivity.class);//点击跳转位置
62                PendingIntent contentIntent = Activity(PushService.this,0,notificationIntent,0);
63                builder.setContentIntent(contentIntent);
64                builder.setSmallIcon(R.drawable.ic_launcher);
65                builder.StringExtra("tickerText")); //测试通知栏标题
66                builder.StringExtra("contentText")); //下拉通知啦内容
67                builder.StringExtra("contentTitle"));//下拉通知栏标题
68                builder.setAutoCancel(true);
69                builder.setDefaults(Notification.DEFAULT_ALL);
70                Notification notification = builder.build();
71                mn.notify((int)System.currentTimeMillis(),notification);
全息设备72            }
73        },delay, period);
74
StartCommand(intent, flags, startId);
76    }
77
78    @Override
吸油茶79public void onDestroy(){
80        Log.e("addNotification", "===========destroy=======");
82    }
83 }
⾃定义了⼀个类PushService继续Service,定义了两个类来实现添加通知和取消通知
//delayTime 延迟多久执⾏。
//tickerText
//contentTitle 通知栏的标题
//contentText 通知栏的内容
addNotification(int delayTime,String tickerText,String contentTitle,String contentText)
//清除通知
cleanAllNotification()
====================================
Service的启动,startService来启动服务只执⾏⼀次onCreate⽅法,但是每次调⽤⼀次startService就会执⾏⼀次onStartCommand函数。
2.注册服务类
在l中的application字段中加⼊如下信息来注册这个服务类。
<service android:enabled="true" android:name=".PushService" android:process="system"></service>
这边有⼀点⾮常重要的是 android:process="system" ,设置为system,否则按退出键使⽤如下⽅式来执⾏会导致程序崩溃,⽽且服务也会被终⽌,android.os.Process.killProcess(android.Pid());或者it(0)
因为service是和主线程在⼀起的,主线程被终⽌了,服务线程也会停⽌掉,就⽆法在后台执⾏了,所以我们必须把服务注册到系统中。
我们启动服务使⽤startservice⽅式,因为使⽤bindservice会跟所绑定的context⼀起死亡的,bindservice的概念是"不求同⽣,但求同死",所以使⽤bindservice时候注意不能设置android:process="system"

本文发布于:2024-09-22 01:48:50,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/277049.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:通知   服务   程序   求同   注册
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议