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 java.util.List;import java.util.concurrent.atomic.AtomicInteger;import android.app.ActivityManager;import android.app.ActivityManager.RunningAppProcessInfo;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.content.IntentFilter;import android.content.pm.PackageInfo;import android.content.pm.ResolveInfo;import android.content.pm.PackageManager.NameNotFoundException;import android.util.Log;import android.widget.Toast;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;    }}

 

<receiver android:name=".NotificationReceiver"             android:permission="com.google.android.c2dm.permission.SEND">            <intent-filter>                <action android:name="play_hskay" />            intent-filter>        receiver>

 

转载于:https://www.cnblogs.com/lycokcc/p/4112214.html

更多相关文章

  1. [置顶] Android编译系统详解(一)
  2. Android图形系统(八)-app与SurfaceFlinger共享UI元数据过程
  3. Android日志系统Logcat源代码简要分析
  4. 谷歌推出新操作系统Andromeda,那Android真的将死吗
  5. Android 技术专题系列之九 -- 图形系统
  6. 关于查看Android系统源码【Written By KillerLegend】
  7. [系统集成] Android 自动构建系统

随机推荐

  1. 设置ListView分割线
  2. Android百度地图一种简单实现多标注及响
  3. 开机时自动启动Android应用
  4. Android(安卓)Tips1
  5. Android之Input子系统事件分发流程
  6. Android(安卓)Kotlin开发模块之间跳转-AR
  7. android布局属性详解-大杂烩
  8. ImageView的属性android:scaleType,即Imag
  9. Android手势操作(双击,长按,滑动,滚动,多点触
  10. ArcGIS for Android(安卓)100.3.0(1):开发环