`
uule
  • 浏览: 6352446 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Android中的通知Notification

 
阅读更多

1、获得系统服务
notificationmanager=(NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
2、创建Notification
notification=new Notification(R.drawable.keai,"可爱",System.currentTimeMillis());
3、对Notification进行一些设置
notification.flags=Notification.FLAG_AUTO_CANCEL;      //设置下拉点击之后回到应用程序,可以有多个值选择
4、Intent与PendingIntent
Intent   intent=new Intent(this,Z18Activity.class);
pendingintent=PendingIntent.getActivity(this,0,intent,0);
notification.setLatestEventInfo(this,"真可爱","太可爱啦!",pendingintent);
5、可更改提示下拉条中的布局
RemoteViews rv=new RemoteViews(this.getPackageName(),R.layout.main);     //此步骤是修改下拉后看到提示条的布局
notification.contentView=rv;
6、用NotificationManager发送Notification提示信息
notificationmanager.notify(0,notification);        //通过标识发送指定的Notification

上面有些步骤是属于并列的,可能后面的操作将覆盖前面的操作

 

Example1:

Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动
Content Title:Notification展开后的标题
Content Text:Notification展开后的内容



 

 

取得NotificationManage

private NotificationManager mNotificationManager;
mNotificationManager = (NotificationManager) 
        getSystemService(Context.NOTIFICATION_SERVICE);

 创建Notification并且显示

//Notification的滚动提示
String tickerText = "My notification, It's a long text! Hello World desiyo?";
//Notification的图标,一般不要用彩色的
int icon = R.drawable.icon_02241_3;
 
//contentTitle和contentText都是标准的Notification View的内容
//Notification的内容标题,拖下来后看到的标题
String contentTitle="My notification";
//Notification的内容
String contentText="Hello World!";
 
//Notification的Intent,即点击后转向的Activity
Intent notificationIntent = new Intent(this, this.getClass());
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
        notificationIntent, 0);
 
//创建Notifcation
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
//设定Notification出现时的声音,一般不建议自定义
notification.defaults |= Notification.DEFAULT_SOUND;
//设定如何振动
notification.defaults |= Notification.DEFAULT_VIBRATE;
//指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身
//这符合一般的Notification的运作规范
notification.flags|=Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);

//显示这个notification
mNotificationManager.notify(HELLO_ID, notification);

 这是最基本的应用,可以说除了找个合适的图标以外,其它都很简单。

使用自定义View的Notification

同Toast一样,我们也可以自已指定1个View来作为Notification展开后的显示内容,比如说在Android Market中下载的时候,Notification中会显示当前下载的进度,那么我们也来模拟1个这样的效果吧。


 
首先给出View的定义文件:notification_view_sample.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="3dp"
>
        <ImageView android:id="@+id/notificationImage"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:src="@android:drawable/stat_sys_download"
        />
        <TextView android:id="@+id/notificationTitle"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:layout_toRightOf="@id/notificationImage"
                android:layout_alignParentRight="true"
                android:paddingLeft="6dp"
                android:textColor="#FF000000"
        />
        <TextView android:id="@+id/notificationPercent"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:layout_below="@id/notificationImage"
                android:paddingTop="2dp"
                android:textColor="#FF000000"
        />
        <ProgressBar android:id="@+id/notificationProgress"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:layout_below="@id/notificationTitle"
                android:layout_alignLeft="@id/notificationTitle"
                android:layout_alignParentRight="true"
                android:layout_alignTop="@id/notificationPercent"
                android:paddingLeft="6dp"
                android:paddingRight="3dp"
                android:paddingTop="2dp"
                style="?android:attr/progressBarStyleHorizontal"
        />
</RelativeLayout>
 
//Notification的滚动提示
String tickerText1 = "Custom view for download notification";
//Notification的图标,一般不要用彩色的
int icon1 = android.R.drawable.stat_sys_download;
 
//Notification的Intent,即点击后转向的Activity
Intent notificationIntent1 = new Intent(this, this.getClass());
notificationIntent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent1 = PendingIntent.getActivity(this, 0, notificationIntent1, 0);
 
//创建Notifcation
Notification notification1 = new Notification(icon1, tickerText1, System.currentTimeMillis());
//设定Notification出现时的声音,一般不建议自定义
notification1.defaults |= Notification.DEFAULT_SOUND;
//设定是否振动
notification1.defaults |= Notification.DEFAULT_VIBRATE;
//notification.number=numbers++;
//指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身
//这符合一般的Notification的运作规范
notification1.flags|=Notification.FLAG_ONGOING_EVENT;
 
//创建RemoteViews用在Notification中
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_view_sample);
contentView.setTextViewText(R.id.notificationTitle, "Download:Facebook for android");
contentView.setTextViewText(R.id.notificationPercent, "35%");
contentView.setProgressBar(R.id.notificationProgress, 100, 35, false);
 
notification1.contentView = contentView;
notification1.contentIntent=contentIntent1;
 
//显示这个notification
mNotificationManager.notify(CUSTOM_VIEW_ID, notification1);

 注意以上代码中使用的是RemoteViews,而不是普通的View,另外使用的是PendingIntent而不是普通的Intent,这都说明了 Notification是1个“远程”的东西,其中能够使用的控件是受限制的,比如说TableLayout就不能使用。看下效果图,是不是和 Market中的界面很接近呢?

 

由于在使用自定义的view时不必使用setLastEventInfo()方法,所以你必须为Notification的contentIntent域定义一个Intent,如下所示:

RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.notification_view);
contentView.setTextViewText(R.id.notificationTitle, "下载文件:测试文件");
contentView.setTextViewText(R.id.notificationPercent, "55%");
contentView.setProgressBar(R.id.notificationProgress, 100, 55, false);

notice.contentView = contentView;
notice.contentIntent = contentIntent;
 

 注意:当为notification创建自定义的布局时,你必须确保它能够再不同的设备方向以及分辨率下都正常工作。这对于所有的布局工作都是十分重要的,所以,不要定义过于复杂的布局,而且要在多种情况下进行测试。

 

更好的控制Notification 动画图标怎么做?
和selector类似,定义1个XML文件放在drawable下,下面是之前用到的stat_sys_download的定义:

<animation-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
    <item android:drawable="@drawable/stat_sys_download_anim0" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim1" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim2" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim3" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim4" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim5" android:duration="200" />
</animation-list>

 如何更新Notification?

注意到前面的代码中用到的CUSTOM_VIEW_ID,这是Notification的ID,如果2次弹出的Notification的ID相同,那么Notification就只会更新而不会再次滚动提醒。之前给出的ProgressBar是不会动的,利用这个方法就可以让它动起来(或者也可以直接调用RemoteView的set方法来直接更新?未试验)
如何自定义提示的声音和振动

//自定义提示音notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");

//自定义振动方式long[] vibrate = {0,100,200,300};notification.vibrate = vibrate;
请注意:如果使用了DEFAULT_SOUND或DEFAULT_VIBRATE,则自定义的提示音和振动无效。
在类似于短消息的应用中如何提示数量?
使用Notification的number属性,默认为0,如果是1或更大的数字,则会在图标上覆盖显示这个数字。
notification.number=notificationNumber;
Flag的使用
notification有1个flag属性,除了DEFAULT_SOUND之外,还有几个很有用的属性。
FLAG_AUTO_CANCEL:自动清除Notification,前面的例子中有用到
FLAG_INSISTENT:提示音一直不停,直至用户响应(很吵吧!)
FLAG_ONGOING_EVENT:表示这是1个正在进行的任务,不可以清除,第2个例子中有用到
FLAG_NO_CLEAR:不可以清除

实例来源:

http://www.apkbus.com/forum.php?mod=viewthread&tid=20486

参考:http://www.apkbus.com/forum.php?mod=viewthread&tid=19156

 

Example2:

Button btn4 = (Button) this.findViewById(R.id.btn4);
        btn4.setText("发出一个通知(Notification)");
        btn4.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                // 实例化通知管理器
                NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

                // 指定单击通知后所打开的详细的通知页面(单击通知后打开 NotificationView)
                PendingIntent contentIntent = PendingIntent.getActivity(
                        Main.this, 0, new Intent(Main.this,    NotificationView.class), 0);

                // 实例化一个通知,并指定其图标和标题(在提示栏上显示)
                Notification n = new Notification(R.drawable.icon01, "我是滚动的通知信息我是滚动的通知信息我是滚动的通知信息", System.currentTimeMillis());
                
                // 设置通知的发送人和通知的详细内容(打开提示栏后在通知列表中显示)
                n.setLatestEventInfo(Main.this, "通知发送人", "我是详细的通知信息我是详细的通知信息我是详细的通知信息", contentIntent);

                // 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒
                n.vibrate = new long[] { 100, 250, 100, 500 };
                
                // 发出通知(其中第一个参数为通知标识符)
                nm.notify(0, n);
            }
        });  
 
// 单击通知列表的某个通知后,所打开的详细的通知页
public class NotificationView extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view);

        TextView txtMsg = (TextView)this.findViewById(R.id.txtMsg);
        txtMsg.setText("点通知之后所链接到的 Activity");
        
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        // 取消显示在通知列表中的指定通知(参数为通知标识符)
        nm.cancel(0);
        
        // 需要关闭此 Activity 的话就 finish 它既可
        // this.finish();
    }
}

 ...

Example3:

 

public class NotificationActivity extends Activity implements OnClickListener {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notification);
        findViewById(R.id.notificationBtn).setOnClickListener(this);
    }
 
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        addNotification();
    }
 
    private void addNotification() {
        NotificationManager manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification();
        notification.icon = R.drawable.icon;
        notification.tickerText = "我在这里";
        notification.defaults = Notification.DEFAULT_SOUND;
        notification.audioStreamType = android.media.AudioManager.ADJUST_LOWER;
         
        Intent intent = new Intent(this, Notification2Activity.class);
         
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
        notification.setLatestEventInfo(this, "短信通知", "亲爱的,晚上8点老地方见哦~", pendingIntent);
        manager.notify(R.drawable.icon, notification);
    }
}
 
public class Notification2Activity extends Activity implements OnClickListener {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notification2);
        findViewById(R.id.cancleBtn).setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        cancleNotification();
    }
 
    private void cancleNotification() {
        // TODO Auto-generated method stub
        NotificationManager manager =  (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(R.drawable.icon);
        Toast.makeText(this, "Notification cancled", Toast.LENGTH_SHORT).show();
    }
     
}
 

都是很简单的例子,帮助理解!

 

 

 

 

 

 

 

 

 

  • 大小: 15.6 KB
  • 大小: 16.2 KB
  • 大小: 17.4 KB
分享到:
评论

相关推荐

    Android中通知Notification使用实例(振动、灯光、声音)

    本文实例讲解了通知Notification使用方法,此知识点就是用作通知的显示,包括振动、灯光、声音等效果,分享给大家供大家参考,具体内容如下 效果图: MainActivity: import java.io.File; import android....

    Android实现Notification的通知栏常驻.zip

    本教程将详细介绍如何在Android中实现一个常驻通知栏的Notification,以确保即使在用户关闭应用后,该通知仍然可见。 一、Notification的基本结构 1. **Notification channels**: 从Android O(8.0)开始,每个...

    Android 通知(notification)简单实用Demo,包含点击功能

    这个"Notification_Test"压缩包中的代码应该包含了以上步骤的实现,你可以下载并运行来深入理解Android通知的工作原理。通过实践,你将能够熟练地在自己的应用中集成通知功能,提供更好的用户体验。同时,还可以...

    Android 通知栏Notification的全面整合学习(各种姿势都有,供您选择)

    本资源包针对Android通知栏的使用进行了全面整合,涵盖了各种应用场景和实现方式,是Android开发者深入理解与实践Notification功能的理想资料。 首先,我们来探讨Android通知的基本结构。一个通知通常包括以下组件...

    Android 8.0通知栏(Notification)适配

    这几天做一个小软件在API28(Android 9.0)的模拟器上测试时,发现通知栏无效,经过一番查询,了解到:API26(Android 8.0)以后,引入了**通知渠道(Notification Channels)**这么一个东西来帮助用户管理通知。...

    Android中使用Notification在通知栏中显示通知示例代码.rar

    Android中使用Notification在通知栏中显示通知示例代码.rar Android中使用Notification在通知栏中显示通知示例代码.rar Android中使用Notification在通知栏中显示通知示例代码.rar

    Android 之 通知Notification

    创建一个基本的Android通知通常需要以下步骤: 1. **创建通知渠道**:对于Android 8.0及更高版本,首先需要创建NotificationChannel对象,并通过NotificationManager的createNotificationChannel方法进行注册。 2....

    Android发送通知Notification

    总结一下,发送Android通知的基本流程包括获取`NotificationManager`、创建`Notification`、设置详细信息以及发送通知。为了提高用户体验,开发者还应考虑通知的可定制性,如声音、振动和渠道设置,以及遵循Android...

    Android 之 Notification 通知消息

    在Android系统中,Notification是应用与用户交互的重要方式,它能够在状态栏中显示消息,即使应用在后台运行也能提醒用户有新的活动或者信息。本文将深入探讨`Android 之 Notification 通知消息`的相关知识点,包括...

    Android中通知Notification的使用方法

    在Android开发中,通知(Notification)是用户界面中不可或缺的一部分,它允许应用在状态栏上显示消息,即使应用不在前台运行也能与用户交互。本文将详细介绍如何在Android中使用Notification,包括基本用法、响应...

    Android notification+Service实时更新

    在Android开发中,`Notification`、`Service`和`BroadcastReceiver`是三个核心组件,它们在许多场景下都有着重要的作用,特别是在实现应用后台运行、实时更新等任务时。本项目"Android notification+Service实时更新...

    Android自定义通知栏Notification

    在Android开发中,自定义通知栏Notification是一种提升用户体验的重要手段。...这个项目不仅提供了基本的自定义通知功能,也可能包含了一些进阶技巧和优化措施,对深入理解Android通知系统非常有帮助。

    android消息通知栏Notification

    在Android系统中,`Notification`是开发者用于向用户展示非交互式信息的重要工具,它通常出现在状态栏中,用户可以通过下拉通知栏查看并交互。`Notification`可以在应用不处于前台运行时,依然向用户传达重要的消息...

    notification-Android带按钮自定义通知栏

    在Android开发中,通知栏(Notification)是向用户传达应用后台事件或信息的重要途径。一个标准的通知通常包含标题、文本内容以及可选的附加操作。然而,为了提供更丰富的交互体验,开发者有时需要创建自定义通知,...

    安卓Android源码——notification1.rar

    在安卓(Android)系统中,通知(Notification)是应用程序与用户交互的重要方式,即使应用在后台运行,也能向用户展示信息。"安卓Android源码——notification1.rar"这个压缩包很可能包含了Android系统中关于通知...

    Android三种Notification(通知)方式

    本文将详细介绍Android中的三种Notification实现方式:基本通知、扩展通知和通知渠道。 一、基本通知 基本通知是最简单的通知形式,适用于传递简短的信息。创建一个基本通知主要涉及以下步骤: 1. 创建...

    Android 通知栏Notification的全面整合学习(完整项目源码)附配套博文

    这个是通知栏框架(Notificaiton)的全面学习,里面把大概所有的情况都列了出来,通过一个DEMO让你了解它的大致所有使用过程。 可以通过以下博文进行配套了解(有效果图): ...

    Android通知Notification汇总

    notification是一种出现在任务栏的提示,特别是在4.0以后notification改进了不少,本文内容都是基于4.0及4.1以后总结来的,详细介绍各种布局的Notification样式,实现音乐播放器、邮件通知等复杂的例子详细代码。

    Android应用源码之notification.zip

    - 在Android系统中,Notification通过NotificationManager服务进行管理,应用通过该服务发送和取消通知。 - 通知会出现在状态栏,当用户下拉时显示详细信息,点击可以启动对应的Activity或者执行预定义的动作。 2...

Global site tag (gtag.js) - Google Analytics