一、使用系统定义的Notification

以下是使用示例代码:

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Context;

public class WaterActivity extends Activity implements OnClickListener, OnSeekBarChangeListener {

private NotificationManager manager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_mian_water);

//获取到通知管理器

manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_wf_back:

// 定义Notification的各种属性

int icon = R.drawable.button_login; //通知图标

CharSequence tickerText = "Hello"; //状态栏显示的通知文本提示

long when = System.currentTimeMillis(); //通知产生的时间,会在通知信息里显示

Notification myNotify = new Notification(icon,tickerText,when);

Context context = getApplicationContext(); //上下文

CharSequence contentTitle = "My Notification"; //通知栏标题

CharSequence contentText = "Hello World!"; //通知栏内容

Intent notificationIntent = new Intent(this,WaterActivity.class); //点击该通知后要跳转的Activity

PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);

myNotify.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

manager.notify(0x00000008, myNotify);

//如果想要更新一个通知,只需要在设置好notification之后,再次调用 setLatestEventInfo(),然后重新发送一次通知即可,即再次调用notify()。

break;

}

}

}

二、使用自定义的 Notification

要创建一个自定义的Notification,可以使用RemoteViews。

要定义自己的扩展消息,首先 要初始化一个RemoteViews对象,然后将它传递给Notification的contentView字段,再把PendingIntent传递给 contentIntent字段。

以下示例代码是完整步骤:

1、创建一个自 定义的消息布局 my_notification.xml

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#ffffff"

android:orientation="vertical" >

android:id="@+id/text_content"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="20sp" />

2、 在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段

RemoteViews rv = new RemoteViews(getPackageName(), R.layout.my_notification);

rv.setTextViewText(R.id.text_content, "hello wrold!");

myNotify.contentView = rv;

3、 为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要 setLatestEventInfo()方法)

Intent intent = new Intent(Intent.ACTION_MAIN);

PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 1);

myNotify.contentIntent = contentIntent;

4、发送通知

manager.notify(0x00000008, myNotify);

5.完整代码

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Context;

import android.widget.RemoteViews;

public class WaterActivity extends Activity implements OnClickListener, OnSeekBarChangeListener {

private NotificationManager manager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_mian_water);

//获取到通知管理器

manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_wf_back:

Notification myNotify = new Notification();

myNotify.icon = R.drawable.button_login;

myNotify.tickerText = "TickerText:您有新短消息,请注意查收!";

myNotify.when = System.currentTimeMillis();

//myNotify.flags = Notification.FLAG_NO_CLEAR;// 不能够自动清除

RemoteViews rv = new RemoteViews(getPackageName(), R.layout.my_notification);

rv.setTextViewText(R.id.text_content, "hello wrold!");

myNotify.contentView = rv;

Intent intent = new Intent(Intent.ACTION_MAIN);

PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 1);

myNotify.contentIntent = contentIntent;

manager.notify(0x00000008, myNotify);

//如果想要更新一个通知,只需要在设置好notification之后,再次调用 setLatestEventInfo(),然后重新发送一次通知即可,即再次调用notify()。

break;

}

}

}

6.清除

manager.cancel(2);

参数属性:

// 定义Notification的各种属性

Notification notification =new Notification(R.drawable.icon,

"测试", System.currentTimeMillis());

//FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉

//FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉

//FLAG_ONGOING_EVENT 通知放置在正在运行

//FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应

notification.flags |= Notification.FLAG_ONGOING_EVENT;

// 将此通知放到通知栏的"Ongoing"即"正在运行"组中

notification.flags |= Notification.FLAG_NO_CLEAR;

// 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用

notification.flags |= Notification.FLAG_SHOW_LIGHTS;

//DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等

//DEFAULT_LIGHTS 使用默认闪光提示

//DEFAULT_SOUNDS 使用默认提示声音

//DEFAULT_VIBRATE 使用默认手机震动,需加上权限

notification.defaults = Notification.DEFAULT_LIGHTS;

//叠加效果常量

//notification.defaults=Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND;

notification.ledARGB = Color.BLUE;

notification.ledOnMS =5000; //闪光时间,毫秒

// 设置通知的事件消息

CharSequence contentTitle ="标题"; // 通知栏标题

CharSequence contentText ="内容"; // 通知栏内容

//如果需要跳转到指定的Activity,则需要设置PendingIntent

Intent notificationIntent =new Intent(A.this, B.class);

// 点击该通知后要跳转的Activity

notificationIntent.putExtra("date","需要传递的参数");

// FLAG_UPDATE_CURRENT 更新数据,如果有多个PendingIntent,且requestCode相同,则会替换为最新extra数据

//如果需要通过不同的extra数据,进行处理,就需要requestCode不相同

int requestCode = new Random().nextInt();

PendingIntent contentItent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

notification.setLatestEventInfo(this, contentTitle, contentText, contentItent);

// 把Notification传递给NotificationManager

notificationManager.notify(0, notification);

注意:

new Intent(this,this.getClass())保证了点击通知栏里的通知可以回到该Activity

但是,假如该Activity还在后台运行,并没有运行,通知事件响应后,系统会自动结束该Activity,然后再重新启动Activity,这不是我们要的。

解决方法为:在manifest.xml文件中找到该Activity,添加属性android:launchMode="singleTask“。这个属性很明显,就是只允许有一个该Activity运行,如果正在运行,则只能切换到当前运行的Activity,而不能重新启动Activity。

三、创建定时器

源代码如下:

import java.util.Timer;

import java.util.TimerTask;

public class WaterActivity extends Activity implements OnClickListener, OnSeekBarChangeListener {

private Timer mTimer = null;

private TimerTask mTimerTask = null;

private int isPause = 0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_mian_water);

}

private void startMyTimer(){

if (mTimer == null) {

mTimer = new Timer();

}

if (mTimerTask == null) {

mTimerTask = new TimerTask() {

@Override

public void run() {

do {

try {

if(isPause == 0) isPause = 1;

else isPause = 0;

Message message = new Message();

message.what = isPause;

handler.sendMessage(message);

} catch (IllegalStateException e) {

}

} while (false);

}

};

}

if(mTimer != null && mTimerTask != null )

mTimer.schedule(mTimerTask, 0, 500);

}

private void stopMyTimer(){

if (mTimer != null) {

mTimer.cancel();

mTimer = null;

}

if (mTimerTask != null) {

mTimerTask.cancel();

mTimerTask = null;

}

}

}

在Unity3D中实现安卓平台的本地通知推送

[前言] 对于手游来说,什么时候需要推送呢?玩过一些带体力限制的游戏就会发现,我的体力在恢复满后,手机会收到一个通知告诉我体力已完全恢复了.这类通知通常是由本地的客户端发起的,没有经过服务端. 在安卓 ...

Android本地消息推送

项目介绍:cocos2dx跨平台游戏 项目需求:实现本地消息推送,需求①:定点推送:需求②:根据游戏内逻辑实现推送(比如玩家体力满时,需要计算后到点推送):需求③:清理后台程序或重启后依然能够实现本地 ...

Android 基于Netty的消息推送方案之Hello World(一)

消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地 ...

IOS 本地通知推送消息

在现在的移动设备中,好多应用性的APP都用到了推送服务,但是有好多推送的内容,比如有的只是单纯的进行推送一个闹钟类型的,起了提醒作 用,有的则是推送的实质性的内容,这就分为推送的内容来区别用什么推送, ...

Android 基于Netty的消息推送方案之对象的传递(四)

在上一篇文章中我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...

Android 基于Netty的消息推送方案之字符串的接收和发送(三)

在上一篇文章中 ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...

Android 基于Netty的消息推送方案之概念和工作原理(二)

上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...

Git总结笔记3-把本地仓库推送到github

说明:此笔记在centos 7 上完成 1.配置公钥 [root@kangvcar ~]# ssh-keygen -t rsa -C "kangvcar@126.com" [roo ...

WebSocket(4)---实现定时推送比特币交易信息

实现定时推送比特币交易信息 实现功能:跟虚拟币交易所一样,时时更新当前比特币的价格,最高价,最低价,买一价等等...... 提示:(1)本篇博客是在上一遍基础上搭建,上一篇博客地址:[WebSocke ...

随机推荐

[APUE]文件和目录(上)

一.文件权限 1. 各种ID 我在读这一章时遇到了各种ID,根据名字完全不清楚什么意思,幸好看到了这篇文章,http://blog.csdn.net/ccjjnn19890720/article/de ...

Webservice接口

快递查询接口 http://webservice.36wu.com/ExpressService.asmxip查询接口 http://webservice.36wu.com/ipService.asm ...

freeCodeCamp:Diff Two Arrays

比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素.换言之,返回两个数组的差异. function diff(arr1, arr2) { var newArr = []; ...

CoreAnimation 核心动画二 锚点

锚点: anchorPoint     以锚点为中心 执行动画 (与 渔夫固定船的点时一致的) anchorPoint 默认是 0.5,0.5  (注意: 锚点 是一个比例) anchorPoint ...

GitHub与VS2013完成项目管理

https://github.com 程序员应该去注册一个账号的网站 1.创建一个仓库 登录你的github网站:找到新建一个仓库的入口 一些基本信息填写完毕后,点击创建,即可拥有一个仓库 2. 让V ...

iOS之创建一个常驻线程

// 当创建一个线程,并且希望它一直存在时,但往往我们创建的线程都是执行完成之后也就停止了,不能再次利用,那么如何创建一个线程可以让他可以再次工作呢,这个时候就需要使用到RunLoop了.下面的是我写 ...

天气类App原型制作分享-ColorfulClouds

ColorfulClouds是一款界面精美的天气预报App,它可以准确预报降雨量.污染程度等.这款App最美的是它的首页天气插画,扁平精美,同时配上了适当的动效,把普通的天气变得漂亮有趣,十分吸引眼球 ...

在Ubuntu下运行 apt-get update命令后出现错误:

在Ubuntu下运行 apt-get update命令后出现错误: The package lists or status file could not be parsed or opened sud ...

datagridview的一些设置

1.自动调整列宽 this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMo ...

Git 中 pull 和 clone 的区别

git pull git clone clone 是本地没有 repository 时,将远程 repository 整个下载过来. pull 是本地有 repository 时,将远程 reposi ...

android 本地提醒功能,android中的本地定时推送到通知栏相关推荐

  1. android 定时推送提醒,使用workManager实现每日定时推送通知

    写这篇博客的缘由来自一个需求: 每日定时推送通知,提醒用户完成签到.如果后台被清理,则在打开App后立即推送. 众所周知,如今的Android国产ROM想要实现定时操作需要做极强的保活.然而一旦做了保 ...

  2. Worktile中的实时消息推送服务实现

    在团队协同工具worktile的使用过程中,你会发现无论是右上角的消息通知,还是在任务面板中拖动任务,还有用户的在线状态,都是实时刷新.Worktile中的推送服务是采用的是基于xmpp协议.erla ...

  3. idea中git替换,推送到新的github或者gitlab上面

    借鉴 目录 git使用,命令行 初始化本地仓库,并提交内容到本地 连接到远程仓库,并将代码同步到远程仓库 继续修改本地代码,然后提交并推送到github idea中git使用合并分支 修改项目的git ...

  4. 直播平台开发过程中关于谷歌fcm推送介绍

    在直播平台开发中要集成谷歌fcm,首先需要满足一下条件: 1.设备必须是android4.0以上,Google Play Services 必须是 11.2.0以上版本 2.Android SDK M ...

  5. 物联网学习 第4讲 中移OneNET HTTP推送服务接入

    物联网开发 第4讲 中移OneNET HTTP推送服务接入 在使用OneNET平台时,如果我们自己开发应用,基本上会有获取设备的上下线信息以及设备上传的数据点的需求. 为了满足上述的需求,我们有以下两 ...

  6. ad域推送软件_如何在域管理环境中进行软件的推送安装

    如何在域管理环境中进行软件的推送安装 1, 要把你准备分发的软件制作成 .msi 软件安装包 . 在 Windows2000 安装光盘运行 x:\Valueadd\3rdparty\Mgmt\Wins ...

  7. 【微信早安定时推送3.0最牛版】微信消息推送后 可提醒可顶置,聊天框名称,头像都可修改~

    微信早安3.0最牛版重磅推出!!! 全网最全最详细教程,无基础看过的都说好,不白找. 往期推送: 微信早安推送1.0版: https://blog.csdn.net/A_Xunla/article/d ...

  8. android开发 app消息提醒功能,Android中利用App实现消息推送机制的代码

    1.消息推送机制 服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭. 我想到了一句话:don't call me,i will call you! qq今 ...

  9. android每日定时推送通知,Android使用JobScheduler定期推送本地通知实例代码

    Android5.0之后提供了JobService和JobScheduler,用于在稍后的某个时间点或者当满足某个特定的条件时执行一个任务.使用JobScheduler,我们可以在用户一段时间没有使 ...

最新文章

  1. 图灵五周年真情回馈广大读者,多种买赠活动等着您
  2. NeurIPS 2021放榜,接收率创九年新高,你的paper中了吗?
  3. java 一组数据中偏差较大的数据_深入分析数据结构中的队列(java代码实现)
  4. 操作系统原理第十一章:大容量存储
  5. 图像的全局特征--LBP特征
  6. 如何设置Windows版Go —快速简便的指南
  7. mysql连接代替子查询_MySQL优化之使用连接(join)代替子查询
  8. 《互联网+ 电商平台设计与运营》一一2.4 小结
  9. 为什么你觉得现在做生意这么难?
  10. [Usaco2008 Mar]River Crossing渡河问题
  11. spark 算子使用类变量_Scala与Spark是天生的一对?
  12. unity 发布苹果商店_Unity支持“Sign in with Apple”功能
  13. 两个三维向量叉积_俩个三维向量叉乘怎么算啊?
  14. 各种手机处理器排行榜_手机处理器性能排行榜和代表机型介绍
  15. 无线鼠标vs蓝牙鼠标
  16. chemdraw如何改中文_如何修改ChemDraw的默认输出格式
  17. 2021年4月4日新增
  18. 北京找工作之艰难困苦
  19. 微信文件传输助手文件存储位置问题
  20. 【面试招聘】超强整理,非科班小硕的进击之路

热门文章

  1. vscode控制字符引起的问题以及解决思路
  2. 500 OOPS: cannot change directory”解决方法
  3. 杭州获评全国最智慧城市
  4. 从UnitedStack OS 1.0 Preview试用申请问卷调查学习OpenStack
  5. CSS3弹性盒模型布局模块介绍
  6. Oracle外键约束修改行为(一)
  7. 博客导读(09.3.21)
  8. 编程零基础做程序员,该怎么学习?首先要学习什么?
  9. 各种Java加密算法
  10. 同学的博客,没想到也这么多文章。