首页 > 解决方案 > 如何在应用程序关闭的确切时间发送通知?

问题描述

我是安卓工作室的新手。我需要创建一个带有提醒功能的笔记应用程序。我决定通过警报管理器来做这件事,但它只在应用程序打开时才有效。仅通过服务来做到这一点是否现实?我注意到在 google keep 应用程序中,创建提醒时,会创建一个新服务。这个怎么做?

活动的部分代码:

public void alarm(Calendar c) {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, AlertReceiver.class);
        intent.putExtra("title",editTask.getText().toString());
        PendingIntent pen = PendingIntent.getBroadcast(this, 1, intent, 0);
        alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pen);

AlertReciver.java

package denchic45.myapp.appmy;
import android.content.BroadcastReceiver;
import android.content.Intent; import android.widget.Toast;
import android.content.Context;
public class AlertReceiver extends BroadcastReceiver {

     @Override
     public void onReceive(Context context, Intent intent) {
         intent = new Intent(context, Services.class);
         context.startService(intent);
         Toast.makeText(context, "alarm", Toast.LENGTH_SHORT).show();
     } }

服务.java

 package denchic45.myapp.appmy; 
 import android.app.IntentService;
 import android.app.NotificationChannel; 
 import android.app.NotificationManager; 
 import android.content.Context;
 import android.content.Intent; 
 import android.os.Build; 
 import android.widget.Toast; 
 import androidx.annotation.Nullable; 
 import androidx.core.app.NotificationCompat; 
 import androidx.core.app.NotificationManagerCompat;

 public class Services extends IntentService {


     public Services() {
         super("public services");
     }

     @Override
     public void onCreate() {
         super.onCreate();
     }

     @Override
     protected void onHandleIntent(@Nullable Intent intent) {
         Context context = getApplicationContext();

         Toast.makeText(context, "WORK", Toast.LENGTH_SHORT).show();
         final String CHANNEL_ID = "1";

         if(Build.VERSION.SDK_INT = Build.VERSION_CODES.O) {
             NotificationChannel channel = new NotificationChannel(CHANNEL_ID,"001",
 NotificationManager.IMPORTANCE_DEFAULT);
             channel.setDescription("description");

             NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
             manager.createNotificationChannel(channel);

             NotificationCompat.Builder notification = new NotificationCompat.Builder(context, CHANNEL_ID)
                     .setContentTitle("dd")
                     .setSmallIcon(R.mipmap.ic_launcher);
             notification.build();
             NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context);
             managerCompat.notify(1,notification.build());
         } else {
             NotificationCompat.Builder notification = new NotificationCompat.Builder(context, CHANNEL_ID)
                     .setContentTitle("dd")
                     .setSmallIcon(R.drawable.note)
                     .setChannelId(CHANNEL_ID);
             notification.build();

             NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context);
             managerCompat.notify(1,notification.build());
         }
     } }

清单中的部分代码:

         <receiver android:name=".AlertReceiver"
             android:enabled="true"
             android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
         </receiver>
         <service android:name=".Services"/>

标签: javaandroidservicenotificationsalarmmanager

解决方案


推荐阅读