Android中的Notification通知详解

写的不好的地方,烦请各位给留个言说一声,,我会改进的。相互学习啊~~
Notification通知这一功能在我们安卓手机上应用的是非常频繁啊。
特别是手机助手,QQ,微信等等各种APP,都会动不动就给谭出一个通知,通知你有多少软件需要更新或者谁发来什么消息等等。。那么我们应该怎么样实现这个功能呢?
其实都是一些死代码。先上代码,需要注意的地方我再说。
    
    
    
    
package com.itheima40.notificationdemo;
import android.os.Bundle;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
private NotificationManager nm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取通知管理器对象, 用于显示和关闭通知
nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
@SuppressWarnings("deprecation")
public void show(View v) {
Notification notification = new Notification(
R.drawable.about_brand,
"您有一条新的消息过来了...",
System.currentTimeMillis());
// 使用隐式方式指向小芳的聊天页面
Intent intent = new Intent("com.itheima40.xiaofang");
/**
* PendingIntent是一个延期意图(在未来的某个时间段, 开启一个页面, 并且可以指定使用的次数)
* 其实就是对Intent类的一个包装, 增加了一个使用次数的功能
*
* intent 是指向某个页面的意图. 注意: 此意图必须使用隐式的方式.
*/
PendingIntent contentIntent = PendingIntent.getActivity(this, 10, intent, PendingIntent.FLAG_ONE_SHOT);
notification.setLatestEventInfo(this,
"小芳", // 通知详细内容的标题
"今晚汉庭168旁边的肯德基旁边的...不见不散.", // 通知详细内容的详情信息
contentIntent); // 当点击通知时, 跳转到哪一个页面的PendingIntent
// 设置通知的标识
// notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击后自动关闭
notification.flags = Notification.FLAG_FOREGROUND_SERVICE; // 运行在前台的服务, 类似于手机卫士的通知
// 设置弹出通知时需要的场景: 声音, 亮灯, 震动
notification.defaults = Notification.DEFAULT_ALL; // 弹出通知时, 播放声音, 亮灯和震动.
nm.notify(123, notification);
}
public void close(View v) {
nm.cancel(123);
}
}
XiaoFangActivity.java的代码:
    
    
    
    
package com.itheima40.notificationdemo;
import android.app.Activity;
import android.os.Bundle;
public class XiaoFangActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("我是小芳的聊天页面...");
}
}
在清单文件中注册Activity
    
    
    
    
<activity android:name=".XiaoFangActivity">
<intent-filter>
//这个必须写
<action android:name="com.itheima40.xiaofang" />
//这个可以不写的
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

布局文件如下:
Android中的Notification通知详解_第1张图片

细节注意点如下:
1,获取通知的管理器: NotificationManager
NotificationManager nm = ( NotificationManager ) getSystemService ( NOTIFICATION_SERVICE );
getSystemService:代表系统的服务。
通知也是系统所具有的一项功能,当我们需要调用哪项系统的服务时,就传入我们所需要的功能服务的名称即可。

2,获取Notification对象。
3.0之后可以通过Notification.Builder来获取Notification对象。
但是为了兼容到2.3版本。所以我们还是继续使用过时的方法:
Notification notification =  new  Notification( icon, titleText , when );
   icon: 第一个参数代表的是通知显示的时候的图标。比如显示QQ消息时通知旁边的那个小企鹅;
  titleText:第二个参数代表的是通知显示的时候的标题。
  when:第三个参数代表的是通知显示的时间,可以通过 System. currentTimeMillis ()获取当前的         
       时间。
如下图所示:此时还没有下拉通知。
Android中的Notification通知详解_第2张图片


3,设置最新的消息的详细内容
notification.setLatestEventInfo( context contentTitle contentText , contentIntent);
context:上下文对象
contentTitle:内容的标题
contentText:内容的详情
contentIntent:一个延迟意图
详细使用方式请看如下代码:解释的很详细了
    
    
    
    
// 使用隐式方式指向小芳的聊天页面
Intent intent = new Intent("com.itheima40.xiaofang");
/**
* PendingIntent是一个延期意图(在未来的某个时间段, 开启一个页面, 并且可以指定使用的次数)
* 其实就是对Intent类的一个包装, 增加了一个使用次数的功能
*
* intent 是指向某个页面的意图. 注意: 此意图必须使用隐式的方式.
*/
PendingIntent contentIntent = PendingIntent.getActivity(this, 10, intent, PendingIntent.FLAG_ONE_SHOT);
//notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.setLatestEventInfo(this,
"小芳", // 通知详细内容的标题
"今晚汉庭168旁边的肯德基旁边的...不见不散.", // 通知详细内容的详情信息
contentIntent); // 当点击通知时, 跳转到哪一个页面的PendingIntent
运行效果如下,向下拉的时候显示的信息:
Android中的Notification通知详解_第3张图片


4,设置通知的运行状态
     
     
     
     
// 设置通知的标识
// notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击后自动关闭
notification.flags = Notification.FLAG_FOREGROUND_SERVICE; // 运行在前台的服务, 类似于手机卫士的通知
参数有: Android中的Notification通知详解_第4张图片
具体的就不解释了。。没什么意思。。


5,怎么设置弹出通知时让手机震动或者响音或者手机屏幕亮一下
    
    
    
    
// 设置弹出通知时需要的场景: 声音, 亮灯, 震动
notification.defaults = Notification.DEFAULT_ALL; // 弹出通知时, 播放声音, 亮灯和震动.
Notification.有三个参数可选

DEFAULT_ALL代表三个效果都要有。
并且需要注意的是震动的时候需要权限:
    
    
    
    
<uses-permission android:name="android.permission.VIBRATE"/>
好了。。需要解释的就是以上了。。





























你可能感兴趣的:(android,intent,notification,pendingintent,通知)