android 백엔드 서비스 정시 알림

8401 단어
최근 한 항목의 요구는 프로그램이 종료된 후에 매일 정해진 시간에 알림을 보낼 수 있다는 것이다. 우리는 사실 백엔드에서 서비스를 하고 시간이 되면 알림을 보낼 수 있다고 생각할 수 있다.
1. 우선 서비스 클래스가 필요합니다.
코드를 먼저 올리고 천천히 설명할게요.
 1 package com.example.androidnotification;
 2 
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 import android.app.Notification;
 6 import android.app.NotificationManager;
 7 import android.app.PendingIntent;
 8 import android.app.Service;
 9 import android.content.Intent;
10 import android.os.IBinder;
11 import android.util.Log;
12 
13 public class PushService extends Service {
14 
15      static Timer timer = null;
16     //    
17     public static void cleanAllNotification() {
18         NotificationManager mn= (NotificationManager) MainActivity.getContext().getSystemService(NOTIFICATION_SERVICE);
19         mn.cancelAll();    
20         if (timer != null) {
21             timer.cancel();
22             timer = null;
23         }
24     }
25 
26     //    
27     public static void addNotification(int delayTime,String tickerText,String contentTitle,String contentText)
28     {            
29         Intent intent = new Intent(MainActivity.getContext(), PushService.class);
30         intent.putExtra("delayTime", delayTime);
31         intent.putExtra("tickerText", tickerText);
32         intent.putExtra("contentTitle", contentTitle);
33         intent.putExtra("contentText", contentText);       
34         MainActivity.getContext().startService(intent);
35     }
36     
37     public void onCreate() {
38         Log.e("addNotification", "===========create=======");
39     }
40     
41     @Override
42     public IBinder onBind(Intent arg0) {
43         // TODO Auto-generated method stub
44         return null;
45     }
46 
47     public int onStartCommand(final Intent intent, int flags, int startId) {
48             
49         long period = 24*60*60*1000; //24      
50         int delay=intent.getIntExtra("delayTime",0);
51         if (null == timer ) {
52             timer = new Timer();
53         }
54         timer.schedule(new TimerTask() {
55             
56             @Override
57             public void run() {
58                 // TODO Auto-generated method stub
59                 NotificationManager mn= (NotificationManager) PushService.this.getSystemService(NOTIFICATION_SERVICE);    
60                 Notification.Builder builder = new Notification.Builder(PushService.this);
61                 Intent notificationIntent = new Intent(PushService.this,MainActivity.class);//                      
62                 PendingIntent contentIntent = PendingIntent.getActivity(PushService.this,0,notificationIntent,0);                
63                 builder.setContentIntent(contentIntent);
64                 builder.setSmallIcon(R.drawable.ic_launcher);
65                 builder.setTicker(intent.getStringExtra("tickerText")); //       
66                 builder.setContentText(intent.getStringExtra("contentText")); //       
67                 builder.setContentTitle(intent.getStringExtra("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                 
75         return super.onStartCommand(intent, flags, startId);
76     }
77     
78     @Override
79     public void onDestroy(){
80         Log.e("addNotification", "===========destroy=======");
81        super.onDestroy();
82     }
83 }

알림 추가와 알림 취소를 위한 두 개의 클래스를 정의하는 Push Service 계속 서비스 클래스 사용자 정의
//delayTime 실행 지연 시간
//tickerText 
//contentTitle 알림 막대의 제목
//contentText 알림 표시줄 내용
addNotification(int delayTime,String tickerText,String contentTitle,String contentText)
 
//알림 지우기
cleanAllNotification()
====================================
서비스의 시작은 start Service가 서비스를 시작하는 데 한 번만 onCreate 방법을 실행하지만, start Service를 호출할 때마다 onStartCommand 함수를 실행합니다.
2. 서비스 클래스 등록
안드로이드 매니페스트에서.xml의 응용 프로그램 필드에 다음과 같은 정보를 추가하여 이 서비스 클래스를 등록합니다.
<service android:enabled="true" android:name=".PushService" android:process="system"></service>

여기서 중요한 것은android:process="시스템"입니다. 시스템으로 설정하지 않으면 종료 키를 누르고 다음과 같은 방식으로 실행하면 프로그램이 붕괴되고 서비스도 종료됩니다.
android.os.Process.killProcess(android.os.Process.myPid());  System.exit(0)

서비스는 메인 라인과 함께 있기 때문에 메인 라인이 중지되고 서비스 라인도 정지되며 백엔드에서 실행할 수 없기 때문에 우리는 서비스를 시스템에 등록해야 한다.
우리는 서비스를 시작할 때 start 서비스 방식을 사용합니다. bind 서비스를 사용하면 연결된 context와 함께 죽습니다. bind 서비스의 개념은 '동생을 추구하지 않지만 동사를 추구합니다.' 이기 때문에 bind 서비스를 사용할 때 android:process='시스템 '을 설정할 수 없습니다.
엔지니어링 소스

좋은 웹페이지 즐겨찾기