初学安卓,完成作业时发现自己写的通知如果自定义一个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:
android:name=".AutoReceiver"
android:label="@string/title_activity_detail" >
谢谢!