Android之Notification的多种用法
程序员文章站
2022-07-13 14:42:23
...
1.实现的功能
默认通知(已经废弃)
默认通知(API 11以后可用)
默认通知(API 16以后可用)
自定义通知
清除通知
2.主要代码
package demo.xzy.qh.com.notificationdemo;
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.View;
import android.widget.Button;
import android.widget.RemoteViews;
/**
* 通知的用法
*/
public class MainActivity extends Activity implements View.OnClickListener {
private static final int NOTIFICATION_FLAG = 1;
private Button mButton1, mButton2, mButton3, mButton4, mButton5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initView() {
mButton1 = (Button) findViewById(R.id.btn1);
mButton2 = (Button) findViewById(R.id.btn2);
mButton3 = (Button) findViewById(R.id.btn3);
mButton4 = (Button) findViewById(R.id.btn4);
mButton5 = (Button) findViewById(R.id.btn5);
}
private void initListener() {
mButton1.setOnClickListener(this);
mButton2.setOnClickListener(this);
mButton3.setOnClickListener(this);
mButton4.setOnClickListener(this);
mButton5.setOnClickListener(this);
}
@Override
public void onClick(View v) {
/**
* 在Android进行通知处理,首先需要从系统那里获得通知管理器NotificationManager,它是一个系统Service
* */
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
switch (v.getId()) {
/**
*默认通知,已经废弃,但是通用
*
* **/
case R.id.btn1:
/**
*
* 创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条触发的activity,
* 所以采用的是PendingIntent,即点击Notification跳转启动到那个Activity
*/
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
/**
*
* 下面需兼容Android 2.x版本时的处理方式:
* Notification notify1 =
* new Notification(R.drawable.message,TickerText:" + "您有新短消息,请注意查收!", System.currentTimeMillis());
*/
Notification notify1 = new Notification();
notify1.icon = R.mipmap.ic_launcher;
notify1.tickerText = "TickerText:您有新短消息,请注意查收!";
notify1.when = System.currentTimeMillis();
/**
* compileSdkVersion <=22时可用,compileSdkVersion>=23时此方法被remove
* */
notify1.setLatestEventInfo(this, "Notification Title",
"This is the notification message", pendingIntent);
/**
*设置右下角角标数字
* */
notify1.number = 1;
/**
* FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
* */
notify1.flags |= Notification.FLAG_AUTO_CANCEL;
/**
* 通过通知管理器来发起通知。如果id不同,则每click,在statu那里增加一个提示
* */
manager.notify(NOTIFICATION_FLAG, notify1);
break;
/**
* 默认通知 API11级之后可用
* */
case R.id.btn2:
PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
/**
* 通过Notification.Builder来创建通知,注意API Level API11之后才支持
* **/
Notification notify2 = new Notification.Builder(this)
/**
* 设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,
* 如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap/icon)
* */
.setSmallIcon(R.mipmap.ic_launcher)
/**
* 设置在statusbar上显示的提示文字
*
* **/
.setTicker("TickerText:" + "您有新短消息,请注意查收!")//
/**
*
* 设置在下拉statusbar后Activity,本例子中的NotififyMessage的TextView中显示的标题
* */
.setContentTitle("Notification Title")
/**
* TextView中显示的详细内容
* */
.setContentText("This is the notification message")
/**
* 关联PendingIntent
* */
.setContentIntent(pendingIntent2)
/**
* 在TextView的右方显示的数字,可放大图片看,在最右侧。
* 这个number同时也起到一个***的作用,如果多个触发多个通知(同一ID),可以指定显示哪一个。
* */
.setNumber(1)
/**
* 需要注意build()是在API level
* 16级之后增加的,在API11中可以使用getNotificatin()来代替
* **/
.getNotification();
notify2.flags |= Notification.FLAG_AUTO_CANCEL;
manager.notify(NOTIFICATION_FLAG, notify2);
break;
/**
* 默认通知 API16级之后可用
* */
case R.id.btn3:
PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), 0);
/**
* 通过Notification.Builder来创建通知,注意API Level API16之后才支持
* **/
Notification notify3 = new Notification.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setTicker("TickerText:" + "您有新短消息,请注意查收!")
.setContentTitle("Notification Title")
.setContentText("This is the notification message")
/**
* 需要注意build()是在API level16及之后增加的,API11可以使用getNotificatin()来替代
* **/
.setContentIntent(pendingIntent3).setNumber(1).build();
/**
* FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
* **/
notify3.flags |= Notification.FLAG_AUTO_CANCEL;
/**
* 步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status状态栏那里增加一个提示
* **/
manager.notify(NOTIFICATION_FLAG, notify3);
break;
/**
* 自定义通知
* **/
case R.id.btn4:
/**
*
* Notification myNotify = new Notification(R.drawable.message,
* "自定义通知:您有新短信息了,请注意查收!", System.currentTimeMillis());
* **/
Notification myNotify = new Notification();
myNotify.icon = R.mipmap.ic_launcher;
myNotify.tickerText = "TickerText:您有新短消息,请注意查收!";
myNotify.when = System.currentTimeMillis();
/**
* 不能够自动清除
* */
myNotify.flags = Notification.FLAG_NO_CLEAR;
RemoteViews rv = new RemoteViews(getPackageName(),
R.layout.my_notification);
rv.setTextViewText(R.id.text_content, "hello wrold!");
myNotify.contentView = rv;
Intent intent = new Intent(Intent.ACTION_MAIN);
PendingIntent contentIntent = PendingIntent.getActivity(this, 1,
intent, PendingIntent.FLAG_ONE_SHOT);
myNotify.contentIntent = contentIntent;
manager.notify(NOTIFICATION_FLAG, myNotify);
break;
/**
*
* 清除通知
* **/
case R.id.btn5:
/**
*
* 清除id为NOTIFICATION_FLAG的通知
* */
manager.cancel(NOTIFICATION_FLAG);
/**
* 清除所有的通知
* */
//manager.cancelAll();
break;
default:
break;
}
}
}
其中主布局中为线性布局,包含5个按钮,自定义通知的布局仅为测试使用,也比较简单,为线性布局中包含一个TextView
自定义通知布局为my_notification.xml,根据实际情况自行拓展即可
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="vertical" >
<TextView
android:id="@+id/text_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />
</LinearLayout>
3.参考
参考博文http://blog.csdn.net/loongggdroid/article/details/17616509
并修正和完善了部分注释,使得阅读起来更加流畅。
推荐阅读
-
构筑Linux防火墙之IPtables的概念与用法(1)
-
JS判断Android、iOS或浏览器的多种方法(四种方法)
-
Android Shader着色器/渲染器的用法解析
-
Android开发之获取单选与复选框的值操作示例
-
HTML5之消息通知的使用(Web Notification)
-
android中最低级错误之——editText.getText().toString()的值为空
-
GO基础之函数的高级用法
-
proguar在Android混淆中的用法
-
详解Android TableLayout中stretchColumns、shrinkColumns的用法
-
android之视频播放系统VideoView和自定义VideoView控件的应用