首页

定制Notification

搜索

概述
Android提供了对通知的定制,如设置通知的震动、声音、设置通知的显示样式、设置在通知中更新进度条
相关属性和常量值
1, defaults属性:Notification类中表示声音的属性。
2, DEFAULT_ SOUND:Notification类中表示默认声音的常量值。
3, vibrate属性:Notification类中表示震动的属性。
设置通知的声音
1、设置通知的声音:
notil.defaults|=Notification. DEFAULT_SOUND,
提示:以上代码用的是|=(或=),因为defaults属性中可能还有别的值,为保留这些值,并添
加声音值,要用|=操作符。
2、自定义通知声音:
设置自定义的音乐文件作为通知的声音,示例代码:
notify.sound=Uri.parse("file:///sdcard/xxx.mp3");
提示:自定义的声音文件在通知中只能播放前几秒中的声音。
设置通知震动的操作步骤
步骤1、在项目清单中声申请震动的权限,示例代码:
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
步骤2、设置默认震动
notify.defaults|=Notification. DE FAULT_VIBRATE;
提示:以上代码用的是|=(或=),因为defaults属性中可能还有别的值,为保留这些值,并添
加震动值,要用|=操作符。
步骤2、自定义震动:
步骤2.1、创建一个long类型的数组,该数组的相邻元素表示震动的开始和结束时间(单位:
毫秒),示例代码:
long[] vibrates=new long[]{0, 100, 200, 300};
步骤2.2、设置Notification.vibrate属性值为步骤1中定义的数组,示例代码:
notify.vibrate=vibrates;
RemoteView类
概述

RemoteView描述一个view,而这个view是在另外一个进程显示的。需要用布局解析器解析布局
资源文件。并且提供了可以修改view内容的一些简单基础的操作。
RemoteView是用来描述一个跨进程显示的view,Android的通知是全局的、跨进程的,由于自
定义的Nofication和显示Notification是两个不同的进程。因此,自定义的Notification必须通过
RemoteView才能显示。
创建RemoteView实例
public RemoteViews(String packageName, int IayoutId)
作用:创建RemoteViews对象。
参数-packageName():当前组件所在包的包名。
参数-IayoutId:布局资源索引值。
示例:
RemoteViews contentView=new RemoteViews(
getPackageName(), R.layout.custom notification);
说明:第二个参数代表的布局文件代码如下:
<?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">
<ImageView
android:id= "@+id/ivPhoto”
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:src= "@drawable/toolbar recommend"/>
<TextView
android:id=”@+id/tvMessage”
android:layout toRightOf= "@id/ivPhoto”
android:layout width= "fill_parent"
android:layout_height= "wrap_content"
android:text="更新下载的通知"
android:textSize= "16sp"
android:textAppearance= "?android:attr/textAppearance"/>
<ProgressBar
android:id= "@+id/pb”
android:layout below= "@id/tvMessage”
android:layout toRightOf= "@id/ivPhoto”
android:layout_width= "fill_parent"
android:layout_height= "wrap_content"
style= "?android:attr/progressBarStyleHorizontal "/>
</RelativeLayout>
该布局文件的显示样式如图一5所示:

图一5

定制通知的相关属性和方法
1, contentView属性:存放RemoteView类型的对象。示例代码:
//创建通知中显示的布局对象
RemoteViews contentView= new RemoteViews(
getPackageName(),
R.layout.custom notification);
//设置通知的显示样式
mNoti.contentView=contentView;
2, public void setProgressBar(ntviewId, int max, int progress, Boolean indeterminate);
说明:该方法是RemoteViews类的方法。
作用:设置布局中进度条(若存在)的进度值。
参数-viewId:布局条的资源索引值。
参数-max:进度条的最大值。
参数-progress:进度条的当前进度值。
参数-indeterminate:讲度条是否存在,存在则值为false;不存在则值为true
示例代码:
mNoti.contentView.setProgressBar(
R.id.pb, PROGRESS_MAX, msg.what, false);
参数值说明:
1, R.id.pb是RemoteViews中的布局文件内的一个进度条的资源索引值。
2, PROGRESS_MAX:一个常量值,表示进度条的最大值,如l00
3, msg.what:进度条的当前进度值。
4, false:进度条存在。
定制通知的操作步骤
步骤1、创建通知对象,示例代码:
mNoti=new Notification(R.drawable.toolbar_recommend,
”又来通知啦!”,System.currentTimeMillis());
步骤2、创建intent对象,并指定通知的目标组件,示例代码:
Intent intent=newIntent(this,MainAct.class);
步骤3、创建PendingInent对象,设置随时更新通知(第四个参数),示例代码:
PendingIntent pintent=PendingIntent.getActivity(this, 1,
intent, PendingIntent.FLAG_UPDATE_CURRENT};
步骤4、设置contentIntent属性值为pintent,示例代码:
mNoti.contentIntent=pintent;
步骤5、设置通知为正在运行状态,不可删除,示例代码:
mNoti.flags=Notification.FLAG_ONGOING_EVENT
步骤6、创建通知中显示的布局对象,示例代码:
RemoteViews contentView= new RemoteViews(
getPackageName(), R.layout.custom notification);
步骤7、设置通知的显示样式,示例代码:
mNoti.contentView=contentView;
步骤8、设置当前的进度值为1,即整个进度值的10%,示例代码:
mNoti.contentView.setProgressBar(R.id.pb, PROGRESS_MAX, 1, false);
步骤9、发送通知,示例代码:
mNotiManager.notify(R.id.btnCustomNoti2, mNoti);
说明:
1、步骤9的mNotiManage唯前面被定义为如下格式:
NotificationManager mNotiManager=(NotificationManager) getSystemService(
NOTIFICATION_SERVICE;
2、自定义通知布局,不能再使用setLatestEventInfo方法。改用
mNotify.contentIntent=pendingIntent;

 

 

上一页 下一页