android 백엔드 서비스 정시 알림
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='시스템 '을 설정할 수 없습니다.
엔지니어링 소스
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.