`

Notification和NotificationManager

阅读更多
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://liangruijun.blog.51cto.com/3061169/657502
   Notification和NotificationManager操作相对比较简单,一般获取系统级的服务NotificationManager,然后实例化Notification,设置它的属性,通过NotificationManager发出通知就可以了。基本步骤如下:
1.获取NotificationManager
String service = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager =(NotificationManager)getSystemService(service);
2.实例化Notification对象
//实例化Notification 
Notification notification = new Notification();
3.设置Notification的属性
// 设置显示图标,该图标会在状态栏显示   
int icon = notification.icon = R.drawable.happy;   
// 设置显示提示信息,该信息也在状态栏显示  
String tickerText = "测试Notification";    
// 显示时间   
long when = System.currentTimeMillis();  notification.icon = icon;   
notification.tickerText = tickerText;   
notification.when = when;   

//也可以这样设置   
Notification notification_2=new Notification(icon,tickerText,when) 
调用setLatestEventInfo()方法在视图中设置图标和时间。
// 实例化Intent 
Intent intent = new Intent(MainActivity.this, MainActivity.class);  
// 获得PendingIntent 
PendingIntent pIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);  
// 设置事件信息 
notification.setLatestEventInfo(MainActivity.this, " Title", "Content", pIntent); 
4.发出通知
//Notification标示ID 
private static final int ID = 1; 
//发出通知 
mNotificationManager.notify(ID, n);
   下面是具体的例子,在这个例子里定义了一个MainActivity发出广播通知,定义一个MyReceiver类继承Broadcasts接受通知,当接收完通知之后,启动一个SecondActivity,在SecondActivity类中通过Notification和NotificationManager来可视化显示广播通知。具体的步骤如下:
MainActivity.java
package com.android.notification; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity { 
    // 声明Button 
    private Button btn; 
    // 定义Broadcast Receiver action 
    private static final String MY_ACTION = "com.android.notification.MY_ACTION"; 
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        // 设置当前布局视图 
        setContentView(R.layout.main); 
        // 实例化Button 
        btn = (Button)findViewById(R.id.Button1); 
        // 添加事件监听器 
        btn.setOnClickListener(listener); 
    } 
    // 创建事件监听器 
    private OnClickListener listener = new OnClickListener() { 
        @Override
        public void onClick(View v) { 
            // 实例化Intent 
            Intent intent = new Intent(); 
            // 设置Intent action属性 
            intent.setAction(MY_ACTION); 
            // 发起广播 
            sendBroadcast(intent); 
        } 
    }; 
}
MyReceiver.java
package com.android.notification; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class MyReceiver extends BroadcastReceiver{ 
    @Override
    public void onReceive(Context context, Intent intent) { 
        // 实例化Intent 
        Intent i = new Intent(); 
        // 在新的任务中启动Activity 
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        // 设置Intent启动的组件名称 
        i.setClass(context, SecondActivity.class); 
        // 启动Activity显示通知 
        context.startActivity(i); 
    } 

SecondActivity.java
package com.android.notification; 

import android.app.Activity; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class SecondActivity extends Activity { 
    // 声明按钮 
    private Button cancelBtn; 
    // 声明Notification 
    private Notification notification ; 
    // 声明NotificationManager 
    private NotificationManager mNotification; 
    // Notification标示ID 
    private static final int ID = 1; 
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.second); 
        // 实例化按钮 
        cancelBtn = (Button)findViewById(R.id.cancelButton2); 
        // 获得NotificationManager实例 
        String service = NOTIFICATION_SERVICE; 
        mNotification = (NotificationManager)getSystemService(service); 
         
        // 实例化Notification 
        notification = new Notification(); 
        // 设置显示图标,该图标会在状态栏显示 
        int icon = notification.icon = android.R.drawable.stat_notify_chat;  
        // 设置显示提示信息,该信息也会在状态栏显示 
        String tickerText = "Test Notification";  
        // 显示时间 
        long when = System.currentTimeMillis(); 
        notification.icon = icon; 
        notification.tickerText = tickerText; 
        notification.when = when; 
         
        // 实例化Intent 
        Intent intent = new Intent(this, MainActivity.class);  
        // 获得PendingIntent 
        PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);  
        // 设置事件信息 
        notification.setLatestEventInfo(this, "消息", "Hello Android", pi);  
        // 发出通知 
        mNotification.notify(ID, notification); 
         
        // 为按钮添加监听器 
        cancelBtn.setOnClickListener(cancelListener); 
    } 
     
    // 取消通知监听器 
     private OnClickListener cancelListener = new OnClickListener() { 
        @Override
        public void onClick(View v) { 
            // 取消通知 
            mNotification.cancel(ID); 
        } 
    }; 
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button  
        android:text="发出广播通知"  
        android:id="@+id/Button1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"
        />
</LinearLayout>
second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView  
        android:text="显示通知界面"  
        android:id="@+id/TextView1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"
        />   
    <Button  
        android:text="取消通知"  
        android:id="@+id/cancelButton2"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"
        />       
</LinearLayout>
在AndroidManifest.xml文件中16~21加入对receiver,SecondActivity的声明
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.notification"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="MyReceiver">
            <intent-filter>
                <action android:name="com.android.notification.MY_ACTION"/>
            </intent-filter>
        </receiver>      
        <activity android:name="SecondActivity"/>         
    </application>
</manifest>
效果图:
 
Notification丰富的提示方式:
声音提醒
·使用默认声音
notification.defaults |= Notification.DEFAULT_SOUND;
·使用自定义声音
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
·注:如果定义了默认声音,那么自定义声音将被覆盖
振动提醒
·使用默认振动
notification.defaults |= Notification.DEFAULT_VIBRATE;
·使用自定义振动
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate;
·注:如果定义了默认振动,那么自定义振动将被覆盖
灯光闪烁提醒
·使用默认闪烁
notification.defaults |= Notification.DEFAULT_LIGHTS;
·使用自定义闪烁
notification.ledARGB = 0xff00ff00; // LED灯的颜色,绿灯
notification.ledOnMS = 300; // LED灯显示的毫秒数,300毫秒
notification.ledOffMS = 1000; // LED灯关闭的毫秒数,1000毫秒
notification.flags |= Notification.FLAG_SHOW_LIGHTS; // 必须加上这个标志
更多特性
可以通过 Notification 的相关字段或标志(flags)为提醒设置更多的特性。
·FLAG_AUTO_CANCEL 标志:当提醒被用户点击之后会自动被取消(cancel);
·FLAG_INSISTENT 标志:在用户响应之前会一直重复提醒音;
·FLAG_ONGOING_EVENT 标志:Add this to the flags field to group the notification under
the "Ongoing" title in the Notifications window.
·FLAG_NO_CLEAR 标志:当在提醒栏中点击“清除提醒”按钮时,该提醒将不会被清除;
·number 字段:This value indicates the current number of events represented by the notification.
The appropriate number is overlaid on top of the status bar icon. If you intend to use this
field, then you must start with "1" when the Notification is first created. (If you change
the value from zero to anything greater during an update, the number is not shown.)
·iconLevel 字段:This value indicates the current level of a LevelListDrawable that is used for the notification icon. You can animate the icon in the status bar by changing this value to correlate with the drawable's defined in a LevelListDrawable.
·contentView 字段:To define your own layout for the expanded message, instantiate a
RemoteViews object and pass it to the contentView field of your Notification. Pass the
PendingIntent to the contentIntent field.
本文出自 “IT的点点滴滴” 博客,请务必保留此出处http://liangruijun.blog.51cto.com/3061169/657502
  • 大小: 22.5 KB
  • 大小: 10.9 KB
  • 大小: 8.6 KB
分享到:
评论

相关推荐

    Android中通过Notification&NotificationManager实现消息通知

    本教程将详细介绍如何利用Notification和NotificationManager在Android中创建各种类型的通知。 首先,为了实现通知功能,我们需要在AndroidManifest.xml文件中添加振动权限,因为通常情况下,通知会伴随振动或声音...

    Notification与NotificationManager详细介绍

    在Android系统中,发一个状态栏通知还是很方便的。下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置?... NotificationManagernm=(NotificationManager)getSystemService(NOTIFICATION_SERV

    Android中使用Notification实现状态栏的通知

    Android也提供了用于处理这些信息的类,它们是Notification和NotificationManager。其中,Notification代表的是具有全局效果的通知,而NotificationManager则是用于发送Notification通知的系统服务。 使用...

    Android使用Notification在状态栏上显示通知

    Android也提供了用于处理此类信息的类,他们是Notification和NotificationManager。其中,Notification代表的是具有全局效果的通知;而NotificationManager则是用于发送Notification通知的系统服务。 使用...

    Android开发 — 状态栏通知Notification、NotificationManager详解

    本文将详细介绍如何使用`Notification`和`NotificationManager`来创建、更新和管理状态栏通知。 首先,`NotificationManager`是用于管理状态栏通知的系统服务,它负责发送通知以及清除已发送的通知。获取`...

    android Notification通知消息学习(NotificationManager)

    8. **源码分析**: 文章提到的“源码”标签可能意味着作者深入解析了NotificationManager和Notification的相关源代码,这有助于开发者理解其工作原理并优化通知的使用。 9. **工具**: 可能是介绍了一些辅助工具或库...

    第7章AndroidBroadcastReceiver组件.pptx

    当BroadcastReceiver接收到重要广播时,可以通过Notification和NotificationManager向用户显示通知。NotificationManager是用于管理通知的系统服务,调用`NotificationManager.notify(int id, Notification ...

    android服务和广播PPT学习教案.pptx

    NotificationBroadcastReceiver不提供可视化界面,但我们可以借助Notification和NotificationManager来创建可显示的提醒。Notification类提供了多种常量用于设置通知效果,如默认的灯光、声音和震动,以及标志位来...

    android服务和广播学习教案.pptx

    广播接收器本身不提供可视化反馈,但可以通过Notification和NotificationManager来显示通知。Notification允许开发者向用户展示消息、图标、声音、震动等信息,提高用户体验。在创建Notification时,可以设置各种...

    Android中关于Notification及NotificationManger的详解

    在Android应用开发中,Notification和NotificationManager是两个关键组件,用于在系统状态栏显示非侵入性的用户提醒。与AlertDialog不同,Notification不会打断用户的当前操作,而是以更温和的方式提供信息,用户...

    BroadcastReceiver 广播和通知

    BroadcastReceiver是全局|系统级别的监听器 Notification和NotificationManager是局部|程序级别的监听器,可以实现可视化的信息显示,通过它在设备状态栏上显示广播信息的内容以及图标和震动等信息

Global site tag (gtag.js) - Google Analytics