Android利用AlarmManager定时设置Notification但是不能按时生成通知的问题

weixin_41956660 2018-11-03 09:41:09
初学安卓,完成作业时发现自己写的通知如果自定义一个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>


感谢大佬们!
...全文
92 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
YXTS122 2018-11-05
  • 打赏
  • 举报
回复
换一台手机试试呗,看看行不行。。。。。。。。。。

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧