通知(二)你可能不知道的Notification用法

来源:互联网 发布:淘宝付款被挤爆了 编辑:程序博客网 时间:2024/06/07 16:02

这里是通知的其中一种,Notification。常用的和自定义的

Notificaton不会打断Activity的运行

显示在状态栏或通知的窗体中,可以有一些警告的设置,如播放声音、闪光灯

应包含图片、标题消息(自定义通知可不用)、最后用一个PendingIntent告知通知来自哪里(ActivityBroadcaseService

可选项可包含文本说明、警告声音、振动、LED闪光灯

几个构造函数:

Notification()

Notification(int icon,CharSequence tickerText, long when)

第三个参数是时间域中显示的时间,不是通知产生时间

Notification(Parcel parcel)

<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.example.statusnotification.MainActivity" >    <Button        android:id="@+id/button1"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:layout_marginTop="65dp"        android:text="普通通知的使用" />    <Button        android:id="@+id/button2"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_centerVertical="true"        android:text="自定义通知的使用" /></RelativeLayout>
自定义通知用到的布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <ImageView        android:id="@+id/imageView1"        android:layout_width="50dp"        android:layout_height="50dp"        android:layout_alignParentLeft="true"        android:layout_marginLeft="30dp"        android:src="@drawable/notify" />    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_toRightOf="@+id/imageView1"        android:text="TextView1" />    <TextView        android:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_toRightOf="@id/imageView1"        android:layout_below="@id/textView1"        android:text="TextView2" /></RelativeLayout>
package com.example.statusnotification;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RemoteViews;public class MainActivity extends Activity {private Button button1;private NotificationManager notificationManager;//通知的管理类private Notification.Builder builder;private Button button2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1 = (Button) findViewById(R.id.button1);button2 = (Button) findViewById(R.id.button2);//用getSystemService实例化通知notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);builder = new Notification.Builder(MainActivity.this);button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent(MainActivity.this,MainActivity.class);PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);builder.setContentIntent(pendingIntent);builder.setContentTitle("通知提示");builder.setContentText("明天放假,今天提前下班");builder.setSmallIcon(R.drawable.notify);builder.setTicker("有新通知");//第一次来通知的时候能看见builder.setDefaults(Notification.DEFAULT_ALL);/*DEFAULT_ALL全部默认 *DEFAULT_LIGHTS默认闪光 *DEFAULT_SOUND默认的铃声 *DEFAULT_VIBRATE默认振动 * 可通过指定Notification的不同参数设置默认的闪光、声音、振动 * 最后不要在AndroidManifest.xml里忘了授权 *  */Uri uri = Uri.parse("file:///mnt/sdcard/Music/audio.mp3");builder.setSound(uri);Notification notification = builder.build();//仅限在Android4.1以上使用,较低版本直接 new Notification//低版本使用notification.defaults = Notification.DEFAULT_SOUND/* * 第一个参数:标识符id * 第二个参数:Notification *///long[] vibrates = { 10, 20, 30};//notification.vibrate = vibrates;//通过一个数组设置振动的时间notificationManager.notify(88, notification);}});button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//自定义的通知一定要用RemoteViewsRemoteViews view = new RemoteViews(getPackageName(), R.layout.custom_notification);view.setImageViewResource(R.id.imageView1, R.drawable.notify);view.setTextViewText(R.id.textView1, "通知");view.setTextViewText(R.id.textView2, "今晚一起聚餐");Intent intent = new Intent(MainActivity.this, MainActivity.class);PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);builder.setContentIntent(pendingIntent);builder.setContent(view);  //这里别忘了指定它的布局Notification notification = builder.build();notificationManager.notify(89, notification);}});}}
工程可设置自定义通知的铃声,mp3文件放在SDCard中。高版本路径可能有所不同sdcard目录在mnt目录下,这里放的mp3文件是audio.mp3

运行结果

源代码下载

先点击普通通知按钮再点击自定义的通知按钮,结果如预期一样。但如果先点击自定义的通知按钮再点击普通通知按钮,出来的通知都是自定义通知的布局和内容。??难道是线程的问题??

今天发现eclipse也有很奇葩的时候,注释里有个"Android4.1""new Notification"也能给我报错,一定要clean才行

0 0