2013/5/12
52_发送状态栏通知
----------------------
Android的状态栏通知(Notification)
通知用于在状态栏显示消息,消息到来时以图标方式表示,如下:
------------------------------------------------------------
就是activity顶部的状态栏
-----------------------------------------------------
如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息。
发送消息的代码如下:
//获取通知管理器
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int icon = android.R.drawable.stat_notify_chat;
long when = System.currentTimeMillis();
//新建一个通知,指定其图标和标题
Notification notification = new Notification(icon, null, when);//第一个参数为图标,第二个参数为标题,第三个为通知时间
notification.defaults = Notification.DEFAULT_SOUND;//发出默认声音
Intent openintent = new Intent(this, OtherActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, openintent, 0);//当点击消息时就会向系统发送openintent意图
notification.setLatestEventInfo(this, “标题”, “我是内容", contentIntent);
mNotificationManager.notify(0, notification);//第一个参数为自定义的通知唯一标识
---------------------------------------------------------------------------------
1.通知由:标题,内容,和时间组成
-----------------------------------
2.以一个例子介绍:
下面是软件的界面:
-----------------------
概要:
EditText
标题:
EditText
内容:
EditText
发送:
Button
-----------------------
3.源码:新建android项目:Notification
a./Notification/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.credream.notification"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".NotificationActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 打电话的权限 -->
<uses-permission android:name="android.permission.CALL_PHONE"/>
</manifest>
---------------------------------------------------------------------
b./Notification/src/com/credream/notification/NotificationActivity.java
package com.credream.notification;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class NotificationActivity extends Activity {
private EditText shorttitleText;
private EditText titleText;
private EditText contentText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//①.找出所需要的几个EditText
shorttitleText = (EditText) this.findViewById(R.id.shorttitle);
titleText = (EditText) this.findViewById(R.id.title);
contentText = (EditText) this.findViewById(R.id.content);
}
public void send(View v){
/// ②.取得用户输入的值
String tickerText = shorttitleText.getText().toString();
String title = titleText.getText().toString();
String content = contentText.getText().toString();
/// 用系统自带的图标 android.R.drawable.stat_notify_chat在 R文件中找到drawable文件夹下的图标
int icon = android.R.drawable.stat_notify_chat;
/// ③.发送通知
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
// new Notification(icon, tickerText, System.currentTimeMillis());
//这里的三个参数意思是:ico是通知图标,tickerText通知概要,第三个是通知发送时间
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:15954910204"));
// 这个意图可以用来激活activity组件。
PendingIntent pendingIntent = PendingIntent.getActivity(this, 10, intent, 0);
// getActivity(this, 10, intent, 0);上下文对象
/*内部是这样实现的:把上下文对象传进去
* 然后context.startActivityForResult(intent,requestCode,flags),10是请求码
* intent是意图,requestCode请求码,flags是为意图对象设置的标志位,不用的话就设置为0。
* 执行顺序:
* 当用户点击通知后,会调用pendingIntent,这个对象,访问context.startActivityForResult(intent,requestCode,flags)
* 这个方法,然后把意图发送出去,然后激活,拨号activity进行拨号
* */
notification.setLatestEventInfo(this, title, content, pendingIntent);
// 设置上下文对象,设置标题,设置内容,pendingIntent,比如当来了通知后,把状态栏拉下来后,
// 点击通知概要会打开响应的软件,比如,来了短信点击短信概要后,会自动的打开短信应用来查看短信
// pendingIntent这个就是指定用什么应用打开该通知。
// 设置接收了通知后的提示声音,这里使用了系统默认的声音。
notification.defaults = Notification.DEFAULT_SOUND;
// 这里设置当用户点击完通知后,通知自动在状态栏消失。
notification.flags = Notification.FLAG_AUTO_CANCEL;
// 取得通知管理器,这是系统的一个服务
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 第一个参数是通知的id,第二个是通知对象
manager.notify(100, notification);
}
// 通知还可以自定义:实现自定义通知的界面和形式
}
----------------------------------------------------------------------
c./Notification/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">发送通知</string>
<string name="shorttitle">概要</string>
<string name="title">标题</string>
<string name="content">内容</string>
<string name="button">发送</string>
</resources>
--------------------------------------
d./Notification/res/layout/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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/shorttitle"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/shorttitle"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/title"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/title"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/content"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/content"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:onClick="send"
/>
</LinearLayout>
----------------------------------------