用AlarmManager来让Notification定时通知,但是自己设定的时间并不能弹出通知,该如何解决?

新手上路,请多包涵

初学安卓,完成作业时发现自己写的通知如果自定义一个instance则不能按时在虚拟机上出现,但是如果把时间改成System.currentTimeMillis(),就会在点击add按钮的一瞬间有通知。想要的效果是点击set alarm的按钮后能弹出选择对话框,选择时间后add之后就会后台开始计时,到点有通知产生。希望能有大佬帮忙看一下问题出在哪里。谢谢!

这是在activity里面写的:

    public void onClickSetAlarm(View arg0){
         final String items[] = {"0 min", "5 min", "10 min", "15 min"};
        
          
            AlertDialog dialog = new AlertDialog.Builder(this)
                    .setIcon(R.drawable.ic_launcher)
                    .setTitle("Choose time")
                    .setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                           if(which == 0){
                               beforeTime = 0;
                           }
                           if(which == 1){
                               beforeTime = 2;
                           }
                           if(which == 2){
                               beforeTime = 10;
                           }
                           if(which == 3){
                               beforeTime = 15;
                           }
                        }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    })
                    .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                         
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
                            Calendar instance = Calendar.getInstance();
                            instance.set(Calendar.HOUR_OF_DAY, 21);//小时
                            instance.set(Calendar.MINUTE, 25);//分钟
                            instance.set(Calendar.SECOND, 0);//秒
                            Intent intent = new Intent(DetailActivity.this,AutoReceiver.class);
                            intent.setAction("VIDEO_TIMER");
                            PendingIntent pi = PendingIntent.getBroadcast(DetailActivity.this,0, intent, 0);
                            alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),5*1000, pi);  
                        }
                    })
                    .create();
            dialog.show();
          


    }

这是receiver:

package com.example.myschedule;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AutoReceiver extends BroadcastReceiver {
    private static final int NOTIFICATION_FLAG = 0;
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("VIDEO_TIMER")){
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, new Intent(context,DetailActivity.class), 0);
            Notification notify = new Notification.Builder(context)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setTicker("You have class!")
                    .setContentTitle("You have a class!")
                    .setContentText("You will have a class soon!")
                    .setContentIntent(pendingIntent).setNumber(1).build();
            
            notify.flags|= Notification.FLAG_AUTO_CANCEL;
            NotificationManager manager = (NotificationManager)context
                    .getSystemService(Context.NOTIFICATION_SERVICE);
            manager.notify(NOTIFICATION_FLAG,notify);
        }

    }

}

这是Manifest.xml:

 <receiver
            android:name=".AutoReceiver"
            android:label="@string/title_activity_detail" >
         </receiver>

谢谢!

阅读 4.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题