最近有个项⽬的要求是在程序退出之后,任然可以每天定时发通知,我们可以想下,其实就是后台开⼀个服务,然后时间到了就发下通知。 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函数。
在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"