Notification
一、概述
Notification是Android中一个重要的系统服务,Notification显示通知信息在手机状态栏,手机状态栏位于屏幕最上方,那里通常显示手机当前的网络状态、电池状态、时间、短信等。Notification代表的是一种具有全局效果的通知,Notification对象要通过NotificationManager(通知管理器类)的对象来发送。
二、Notification类
1)概述
Notification类用于存放通知标题、内容、图标以及发送的目标对象。
2)常用属性
1.icon:通知的图标 示例代码: Notification notif = new Notification(); notif.icon = R.drawable.ic_launcher; 说明:第一行创建通知对象,第二行设置通知对象的icon的图标,该图标用了Android默认的图标,也可以是其它图片。 2.tickerText:通知标题,该标题显示在窗口的状态栏中。 示例代码:notif.tickerText="通知来啦"; 3.flags:设置通知状态的标志值,有如下可选常量值: FLAG_AUTO_CANCEL:在通知栏点击此通知后通知被清除。 FLAG_INSISTENT:重复发出声音,直到用户响应此通知。 FLAG_ONGOING_EVNET:将此通知放到通知栏的"Ongoing"即"正在运行"组中 FLAG_NO_CLEAR:禁止手动清除此通知。 4.defaults:设置通知的默认属性,默认属性包含声音提示、震动提示、闪光提示等。 其中: DEFAULT_SOUND:默认声音 DEFAULT_VIRBATE:默认震动 DEFAULT_LIGHTS:默认闪光灯 ALL:使用默认声音、默认震动和默认闪光灯。 5.public int contentIntent:存放一个PendingIntent类型的对象 PendingIntent类稍后介绍。 6.public int contentView:存放一个RemoteView类型的对象。使用该对象可以在状态栏显示如下载进度这类的效果。
PendingIntent类
1、概述
1)PendingIntent用于描述Intent及其最终的行为。
2)PendingIntent对象可以递交给其它应用程序,然后继续处理。这样可稍后才处理PendingIntent中描述的Intent及其最终行为。
2、常用方法
1)public static PendingIntentgetActivity(Context context,int requestCode,Intent intent,int flags) 作用:从系统取得一个用于启动目标(Intent中设置)Activity的 PendingIntent对象。 参数——context:当前组件的对象。 参数——requestCode:请求码,用0即可。 参数——intent:intent对象,用于指定通知的目标组件。 参数——flags:设置通知类型,有两个常用的可选值: 1.FLAG_CANCEL_CURRENT:设定在提取PendingIntent时,先关闭之前的PendingIntent实例,这样得到的PendingIntent就是新的了。 2.FLAG_UPDATE_CURRENT:设置新的Intent更新之前的PendingIntent中的Intent对象数据,例如更新Intent中的Extras。 提示:本应用中设置flags值为0即可。 2)public static PendingIntent getService(Context context,int requestCode,Intent intent,int flags) 作用:从系统取得一个用于启动目标Service的PendingIntent对象 3)public static PendingIntent getBroadcast(Context context,int requestCode,Intent intent,int flags) 作用:从系统取得一个用于启动BroadcastReceiver的Intent广播的PendingIntent对象。
值得一提的就是:
使用Notification notif = new Notification(R.drawable.ic_launcher,"通知来了!",System.currentTimeMillis());的方法已经落伍了,所以不能够使用该方法,需要改用Notification.Builder来替代
实际案例:
package com.jxust.day07_01_notificationdemo;
import android.annotation.SuppressLint;
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.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
@SuppressLint("NewApi")
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setListener();
}
private void setListener() {
findViewById(R.id.btnSendNotification).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 创建启动目标Activity的Intent对象
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 创建PendingIntent对象
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
// 创建Notification对象 已过时
// Notification notif = new
// Notification(R.drawable.ic_launcher,"通知来了!",System.currentTimeMillis());
// 设置点击通知的监听
// notif.setLatestEventInfo(MainActivity.this,
// "你有软件可以更新", "点击开始更新", pi); 已过时
// 创建通知管理器对象 / 获得系统服务
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 系统推荐的新用法
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setContentTitle("你有软件可以更新");
builder.setContentText("点击开始更新");
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setContentIntent(pi); // 这个就是可以通过点击来跳到另一个Activity的作用
Notification notification = builder.build();
// 发送通知
manager.notify(88,notification);
}
});
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/btnSendNotification" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送通知" /> </RelativeLayout>
package com.jxust.day07_01_notificationdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
// present.
getMenuInflater().inflate(R.menu.second, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.jxust.day07_01_notificationdemo.SecondActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second Activity" /> </RelativeLayout>
效果如下:
通过点击创建出来的Notification可以跳转到SecondActivity