android发送通知及更新通知

/**
     * 发送通知
     */
    public void setNotification(){
        /**  start */
        //1.得到NotificationManager:
        mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // 创建一个新的Notification对象,并添加图标
        notification = new Notification();
        // 通知显示的图标
        notification.icon = R.drawable.icon_bao;
        // 在状态栏(Status Bar)显示的通知文本提示,如:
        notification.tickerText = "收到一个新的通知";
        //发出提示音,如:
        notification.defaults |= Notification.DEFAULT_SOUND;//或
//        notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");//或
//        notification.sound = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "6");
        //填充Notification的各个属性:
        Context context = getApplicationContext();
        CharSequence contentTitle = "通知标题";
        CharSequence contentText = "通知内容";
        //点击通知跳转到哪里
        Intent notificationIntent = new Intent(this, CreateMemberActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        //在通知栏上点击此通知后自动清除此通知
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        //LED灯闪烁
        notification.defaults |= Notification.DEFAULT_LIGHTS;
//        或者可以自己的LED提醒模式:
//        notification.ledARGB = 0xff00ff00;
//        notification.ledOnMS = 300; //亮的时间
//        notification.ledOffMS = 1000; //灭的时间
//        notification.flags |= Notification.FLAG_SHOW_LIGHTS;
        //手机振动
        notification.defaults |= Notification.DEFAULT_VIBRATE;
//        或
//        long[] vibrate = {0,100,200,300};
//        notification.vibrate = vibrate;
        //发送通知
        mNotificationManager.notify(1, notification);
        /**  end */
    }
/**
     * 更新通知
     */
    public void updateNotification(){
        notification.tickerText = "收到第二个新的通知";
        Context context = getApplicationContext();
        CharSequence contentTitle = "点击跳转";
        CharSequence contentText = "跳转到添加会员";
        //点击通知跳转到哪里
        Intent notificationIntent = new Intent(this, MemberDetailsActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        mNotificationManager.notify(1, notification);
    }

通知是应用程序通知用户的一种方式,它无须活动,由通知管理器进行统一管理。通知包含一下功能:

1.      创建新的状态栏图标

2.      在扩展的状态栏窗口显示额外的信息(可以发起一个意图)

3.      闪烁/LED

4.      让手机震动

5.      发出声音(铃声,媒体库歌曲)

通知管理器是用来处理通知的系统服务,使用getSystemService方法可以获得对它的引用,如下:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);

通过使用通知管理器,可以触发新的通知,修改现有的通知或者删除那些不再需要的通知。首先创建一个新的Notification对象并传递给它要在状态栏显示的图标、状态栏的点击文本以及这个通知的时间。可以设置Notification对象的number属性来显示一个状态栏图标所表示的事件的数量。

Notification notification = new Notification(R.drawable.icon,"在EoeAndroidReceiver1中", System.currentTimeMillis());

可以通过两张方式在扩展的状态窗口配置通知的外观。

1.      使用setLatestEventInfo方法更新标准的扩展的状态通知显示中所显示的详细信息。

2.      使用一个远程视图(Remote View)设置contentView和contentIntent,以便为扩展的状态显示分配一个定制的UI。

最简单的方法是使用setLatestEventInfo方法来填充默认的状态窗口布局。标准的扩展的状态窗口布局会显示构造函数中定义的图标和时间,以及标题和一个详细信息字符串。

notification.setLatestEventInfo(context, "在EoeAndroidReceiver1中", null,contentIntent);

通知常用于请求用户的动作或注意,所以可以指定一个PendingIntent,当用户单击通知项的时候触发它,在大多数情况下,该意图应该打开应用程序,并导航到为通知提供了上下文的活动。

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,new Intent(context, ActivityMain.class), 0);

notification.setLatestEventInfo(context, "在EoeAndroidReceiver1中", null,contentIntent);

notificationManager.notify(NOTIFICATION_ID, notification);

向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合:

Notification.DEFAULT_LIGHTS

Notification.DEFAULT_SOUND

Notification.DEFAULT_VIBRATE

如果想全部使用默认值,可以使用Notification.DEFAULT_ALL常量。

Notification.defaults =Notificaiton.DEFAULT_ALL;

通过向sound属性分配一个位置URI,android可以将手机上的任意音频文件作为通知进行播放。要使用自己定制的音频,需要把它复制到设备上,或者把它包含在原始资源(raw)中。

Uri uri =RingtoneManager.getDefaultUri(RingtongManager.TYPE_NOTIFICATION);

Notification.sound=uri;

可以使用电话的振动功能,让通知执行指定类型的振动。Android可以控制振动的类型,可以使用振动来传递信息或者吸引用户的注意。

要设置振动类型,可以向通知的vibrate属性分配一个longs类型的数组:构造该数组,可以使得代表振动时间的值和代表暂停时间的值交替存在。使用振动必须添加权限:

<uses-permissionandroid:name=”android.permission.VIBRATE”/>

Long[] vibrate = newlong[]{1000,1000,1000,1000,1000};

notification.vibrate=vibrate;

通知还可以包含用来配置设备的LED的颜色和闪烁频率的属性。

每个设备在对LED的控制方面可能具有不同的限制。如果指定的颜色可用,则将使用一个与指定颜色最接近的颜色。

ledARGB属性可以用来设置LED颜色,而ledOffMS和ledOnMS属性则可以设置LED闪烁的频率和模式。可以通过把ledOnMS属性设置为1,并且把ledOffMS设置为0来打开LED,或者也可以通过把这两个属性都设置为0来关闭LED。

一旦配置了LED设置,就必须在通知的flags属性中添加FLAG_SHOW_LIGHTS标记。

notification.ledARGB = Color.RED

notification.ledOffMS = 0;

notification.ledOnMS = 1;

notification.flags = notification.flags |Notification.FLAG_SHOW_LIGHTS;

通过设置通知的FLAG_INSISTENT和FLAG_ONGOING_EVENT标记,可以把它配置为持续的或者连续的。

持续的通知会一直重复音频、振动和闪灯设置,只到被取消为止。

1. NotificationManager和Notification用来设置通知。

通知的设置等操作相对比较简单,基本的使用方式就是用新建一个Notification对象,然后设置好通知的各项参数,然后使用系统后台运行的NotificationManager服务将通知发出来。

基本步骤如下:

1)得到NotificationManager:

String ns = Context.NOTIFICATION_SERVICE;

NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

2)创建一个新的Notification对象:

Notification notification = new Notification();

notification.icon = R.drawable.notification_icon;

也可以使用稍微复杂一些的方式创建Notification:

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

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

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

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

3)填充Notification的各个属性:

Context context = getApplicationContext();

CharSequence contentTitle = "My notification";

CharSequence contentText = "Hello World!";

Intent notificationIntent = new Intent(this, MyClass.class);

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

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

Notification提供了丰富的手机提示方式:

a)在状态栏(Status Bar)显示的通知文本提示,如:

notification.tickerText = "hello";

b)发出提示音,如:

notification.defaults |= Notification.DEFAULT_SOUND;

notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");

notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");

c)手机振动,如:

notification.defaults |= Notification.DEFAULT_VIBRATE;

long[] vibrate = {0,100,200,300};

notification.vibrate = vibrate;

d)LED灯闪烁,如:

notification.defaults |= Notification.DEFAULT_LIGHTS;

或者可以自己的LED提醒模式:

notification.ledARGB = 0xff00ff00;

notification.ledOnMS = 300; //亮的时间

notification.ledOffMS = 1000; //灭的时间

notification.flags |= Notification.FLAG_SHOW_LIGHTS;

* 更多的特征属性

* notification.flags |= FLAG_AUTO_CANCEL; //在通知栏上点击此通知后自动清除此通知

* notification.flags |= FLAG_INSISTENT; //重复发出声音,直到用户响应此通知

* notification.flags |= FLAG_ONGOING_EVENT; //将此通知放到通知栏的"Ongoing"即"正在运行"组中

* notification.flags |= FLAG_NO_CLEAR; //表明在点击了通知栏中的"清除通知"后,此通知不清除,

* //经常与FLAG_ONGOING_EVENT一起使用

* notification.number = 1; //number字段表示此通知代表的当前事件数量,它将覆盖在状态栏图标的顶部

* //如果要使用此字段,必须从1开始

* notification.iconLevel = ; //

*/

//设置通知的事件消息

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

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

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

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

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

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

//把Notification传递给NotificationManager

mNotificationManager.notify(0,notification);

4)发送通知:

private static final int ID_NOTIFICATION = 1;

mNotificationManager.notify(ID_NOTIFICATION, notification);

2. 通知的更新

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

3. 自定义通知视图

这部分可以参考官方文档,讲的很详细了。

AndroidSDK: docs/guide/topics/ui/notifiers/notifications.html

时间: 2024-11-02 20:56:17

android发送通知及更新通知的相关文章

网络请求怎么样和UI线程交互? Activity2怎么通知Activity1 更新数据

1.网络请求怎么样和UI线程交互? 目前我的做法是,建立线程池管理网络请求线程,通过添加task来新增网络请求.所有的网络操作通过统一的request来实现,网络返回结果通过回调onError和onSuccess来实现对结果的处理(涉及到ui部分用runOnUiThread or handler通知ui更新,工程上两种都有,主要看你喜欢,不过用handler请注意内存泄露问题...) 这种做法好处就是,线程池可以避免不断开启线程导致虚耗资源,同时可以做到管理线程,自定义任务执行的顺序.统一req

Android种使用Notification实现通知管理以及自定义通知栏(示例四)

示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我们的通知栏仅仅是更改传来短信的数目,而不是对每条短信单独做一个通知栏用于提示. 修改通知 可以设置一条通知,当然可以更新一条通知,我们通过在调用NotificationManager.notify(ID, notification)时所使用的ID来更新它.为了更新你之前发布的通知,你需要更新或者创建

android:Notification实现状态栏的通知

在使用手机时,当有未接来电或者新短消息时,手机会给出响应的提示信息,这些提示信息一般会显示到手机屏幕的状态栏上. Android也提供了用于处理这些信息的类,它们是Notification和NotificationManager. 当中,Notification代表的是具有全局效果的通知,而NotificationManager则是用于发送Notification通知的系统服务. 使用Notification和NotificationManager类发送和显示通知也比較简单,大致能够分为下面四个

Android极光推送自定义通知

private void showInspectorRecordNotification() { RemoteViews customView = new RemoteViews(context.getPackageName(), R.layout.view_custom); customView.setTextViewText(R.id.tvName_inspectPlan, planInfo.convertlineId2lineName(context, MyApplication.getI

基于C/S架构的3D对战网络游戏C++框架 _【不定期更新通知】

由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C++.服务器端开发.游戏开发相关的内容给大家(因为这些内容已经熟悉也积攒了一定量现有的笔记所以整理成博客会相对轻松些).感谢大家支持,深鞠躬.过两天笔者要去上海参加C++大会,回来后会把参会感悟也分享给大家的^__^.喜欢技术人的纯粹,没有等级之分,希望我们能一路一起进步,共同成长. 基于C/S架构

如何发送本地推送通知

如何发送本地推送通知 推送通知也属于UI的一部分,所以推送通知对象是以UI开头 方法送通知的代码方法控制器的-touchesBegan: withEvent: 中测试,比较合适,放到viewDidLoad方法,用户的注册请求还没有完成方法就调用了 创建本地通知 // 创建本地通知对象 UILocalNotification *ln = [[UILocalNotification alloc] init]; 设置本地通知属性(推荐一个一个属性测试运行) // 1.设置通知的内容(如果此属性不设置是

《.NET 相依性注入》更新通知與折價券 (0815)

嗯,美金 $2.00 元的折價券活動又來囉! 先把這次更新的 release notes 內容貼上來,有購買此書的朋友應該都已經收到 email 了: 敬愛的讀者: 這次更新的地方主要是第 4 章增加了〈ASP.NET MVC 的 DI 應用例〉一節,其中包含四個小節,分別涵蓋 IControllerFactory 與 IDependencyResolver 之實作,以及採用 Unity 容器和 Unity.Mvc5 套件的基本用法.範例程式也都上傳至 Github 了.(本章內容與範例皆適用

android 实现自己定义状态栏通知(Status Notification)

在android项目的开发中,有时为了实现和用户更好的交互,在通知栏这一小小的旮旯里,我们通常须要将内容丰富起来,这个时候我们就须要去实现自己定义的通知栏,比如以下360或者网易的样式: 首先我们要了解的是 自己定义布局文件支持的控件类型:Notification的自己定义布局是RemoteViews,因此,它仅支持FrameLayout.LinearLayout.RelativeLayout三种布局控件,同一时候支持AnalogClock.Chronometer.Button.ImageBut

Clojure:两步发送iOS推送通知(apns)

首先在project.clj中,添加对notnoop 类库的引用:[com.notnoop.apns/apns "0.2.3"] 然后使用如下方法就可以发送推送消息了: 1 (ns demo.apns 2 (:import (com.notnoop.apns APNS))) 3 4 (defn send-push-notification 5 [device-tokens message] 6 (loop [rest-device-tokens device-tokens 7 sent