NotificationManager
获取NotificationManager
String service = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager =(NotificationManager)getSystemService(service);
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 = new Intent(MainActivity.this, MainActivity.class);
-
- PendingIntent pIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
-
- notification.setLatestEventInfo(MainActivity.this, " Title", "Content", pIntent);
4.发出通知
-
- 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 {
-
- private Button btn;
-
- private static final String MY_ACTION = "com.android.notification.MY_ACTION";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.main);
-
- btn = (Button)findViewById(R.id.Button1);
-
- btn.setOnClickListener(listener);
- }
-
- private OnClickListener listener = new OnClickListener() {
- @Override
- public void onClick(View v) {
-
- Intent intent = new Intent();
-
- 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 i = new Intent();
-
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
- i.setClass(context, SecondActivity.class);
-
- 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;
-
- private Notification notification ;
-
- private NotificationManager mNotification;
-
- 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);
-
- String service = NOTIFICATION_SERVICE;
- mNotification = (NotificationManager)getSystemService(service);
-
-
- 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 = new Intent(this, MainActivity.class);
-
- 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.
本文转自 lingdududu 51CTO博客,原文链接:
http://blog.51cto.com/liangruijun/657502