Android本地定时通知,android本地定时通知

android本地通知略有不同,分为立即触发和延时触发

1.即时通知

android默认的Notification为立即触发

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

intent.setClass(_gameActivity, _gameActivity.getClass());

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

PendingIntent content = PendingIntent.getActivity(context, 0, intent, 0);

final NotificationManager notiMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

final Notification noti = new Notification(R.drawable.icon, notiResult.getPayload(), System.currentTimeMillis());

String app_name = _gameActivity.getResources().getString(R.string.app_name);

noti.setLatestEventInfo(context, app_name, notiResult.getPayload(), content);

notiMgr.notify(atomicInteger.incrementAndGet(), noti);

2.延时触发

想让一定时间后再触发通知,其实是用系统的AlarmManager来实现的。

具体的AlarmManager解释参考

http://yuanzhifei89.iteye.com/blog/1131523

http://blog.csdn.net/ryantang03/article/details/9317499

添加一个ALARM_SERVICE

/*

* name:通知名字,作为通知id使用

* content:通知内容

* time:倒时时(秒)

* */

public static void addLocalNotication(String name, String content, int time)

{

Calendar cal = Calendar.getInstance();

cal.setTimeInMillis(System.currentTimeMillis());

cal.add(Calendar.SECOND, (int) time);

Activity activity = _gameActivity;

Intent intent = new Intent(activity, NotificationReceiver.class);

intent.setClass(activity, NotificationReceiver.class);

intent.setData(Uri.parse(name));

intent.putExtra("msg", "play_hskay");

intent.putExtra("content", content);

PendingIntent pi = PendingIntent.getBroadcast(activity, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager am = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);

am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);

}

添加一个系统通知类,用于在倒计时间到时,接收系统轮询通知

import android.app.ActivityManager;

import android.app.ActivityManager.RunningTaskInfo;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.BroadcastReceiver;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

import java.util.List;

import java.util.concurrent.atomic.AtomicInteger;

public class NotificationReceiver extends BroadcastReceiver {

public NotificationReceiver() {

}

@Override

public void onReceive(Context context, Intent itent) {

//Toast.makeText(context, "闹铃响了, 可以做点事情了~~", Toast.LENGTH_LONG).show();

String msg = itent.getStringExtra("msg");

String content = itent.getStringExtra("content");

//判断应用是否在前台运行

if (isTopActivity(context)) {

return;

}

//推送一条通知

shownotification(context, content);

return;

}

public void shownotification(Context context, String msg) {

NotificationManager barmanager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

Notification notice = new Notification(R.drawable.icon, msg, System.currentTimeMillis());

notice.flags = Notification.FLAG_AUTO_CANCEL;

Intent appIntent = new Intent(Intent.ACTION_MAIN);

appIntent.addCategory(Intent.CATEGORY_LAUNCHER);

appIntent.setComponent(new ComponentName(context.getPackageName(), context.getPackageName() + "." + "Splash"));

//设置启动模式

appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,

appIntent, PendingIntent.FLAG_UPDATE_CURRENT);

String app_name = context.getResources().getString(R.string.app_name);

notice.setLatestEventInfo(context, app_name, msg, contentIntent);

AtomicInteger atomicInteger = new AtomicInteger(1);

barmanager.notify(0, notice);

}

protected static boolean isTopActivity(Context activity) {

String packageName = activity.getPackageName();

ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);

List tasksInfo = activityManager.getRunningTasks(1);

if (tasksInfo.size() > 0) {

Log.d("test", "---------------包名-----------" + tasksInfo.get(0).topActivity.getPackageName());

//应用程序位于堆栈的顶层

if (packageName.equals(tasksInfo.get(0).topActivity.getPackageName())) {

return true;

}

}

return false;

}

}

配置文件中添加

android:permission="com.google.android.c2dm.permission.SEND">

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值