Android入门教程 | Notification 使用

使用过程

  • NotificationManager - 用于提示的管理,例如发送、取消
  • NotificationCompat.Builder - Builder 模式构造 notification;
  • Notification - 提示,能够显示在状态栏和下拉栏上;构造实例能设定 flags;
NotificationDemo 界面中放置了很多个按钮,每个按钮发送的提示并不完全相同。流程都一样。
设定一个 NotificationManager, 使用 NotificationCompat.Builder 来建立 Notification;点击按钮时 NotificationManager.notify 发送提示
其中有接收广播发送 notification 的例子。
build.gradle部分代码,最低API 19:
android { compileSdkVersion 23 buildToolsVersion "23.0.1"defaultConfig { applicationId "com.rust.rustnotifydemo" minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }

主要代码 MainActivity.java
import android.app.NotificationManager; import android.app.Notification; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v4.app.NotificationCompat; import android.support.v7.widget.Toolbar; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; class notifyBroadcast extends BroadcastReceiver {@Override public void onReceive(Context context, Intent intent) { NotificationManager nMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Intent goHome = new Intent(Intent.ACTION_MAIN); goHome.addCategory(Intent.CATEGORY_HOME); NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.signal_horn_26px) .setContentText("点击返回桌面") .setContentTitle("Go home") .setTicker("来自广播的提示") .setContentIntent(PendingIntent.getActivity(context, 0, goHome, 0)); Notification notificationBroadcast = builder.build(); notificationBroadcast.flags |= Notification.FLAG_AUTO_CANCEL; nMgr.notify(002, notificationBroadcast); /* id相同;此提示与 Notification 2 只能显示一个 */ } }public class MainActivity extends AppCompatActivity { public static final String BroadcastNotify = "com.rust.notify.broadcast"; private EditText editContent; private Button sendNotification; private Button notifyButton1; private Button notifyButton2; private Button cleanButton; private Button notifyBroadcast; private int notificationId = 001; private BroadcastReceiver notifyReceiver; private InputMethodManager inputMgr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); IntentFilter filter = new IntentFilter(BroadcastNotify); notifyReceiver = new notifyBroadcast(); registerReceiver(notifyReceiver, filter); /* get the widgets */ editContent = (EditText) findViewById(R.id.et_content); sendNotification = (Button) findViewById(R.id.btn_send_content); notifyButton1 = (Button) findViewById(R.id.btn_notify_1); notifyButton2 = (Button) findViewById(R.id.btn_notify_2); notifyBroadcast = (Button) findViewById(R.id.btn_notify_broadcast); cleanButton = (Button) findViewById(R.id.btn_clean_notification); /* 构造一个Bitmap,显示在下拉栏中 */ final Bitmap notifyBitmapTrain = BitmapFactory .decodeResource(this.getResources(), R.drawable.train); /* 管理器-用来发送notification */ final NotificationManager nMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notifyButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(getApplicationContext(), MainActivity.class); NotificationCompat.Builder nBuilder1 = new NotificationCompat.Builder(getApplicationContext()) .setTicker("Notify 1 ! ")/* 状态栏显示的提示语 */ .setContentText("Go back to RustNotifyDemo")/* 下拉栏中的内容 */ .setSmallIcon(R.drawable.notification_small_icon_24)/* 状态栏图片 */ .setLargeIcon(notifyBitmapTrain)/* 下拉栏内容显示的图片 */ .setContentTitle("notifyButton1 title")/* 下拉栏显示的标题 */ .setContentIntent(PendingIntent .getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); /* 直接使用PendingIntent.getActivity();不需要实例 */ /* getActivity() 是 static 方法*/ Notification n = nBuilder1.build(); /* 直接创建Notification */ n.flags |= Notification.FLAG_AUTO_CANCEL; /* 点击后触发时间,提示自动消失 */ nMgr.notify(notificationId, n); } }); notifyButton2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { NotificationCompat.Builder nBuilder2 = new NotificationCompat.Builder(getApplicationContext()) .setTicker("Notify 2 ! ")/* 状态栏显示的提示语 */ .setContentText("Notification 2 content")/* 下拉栏中的内容 */ .setSmallIcon(R.drawable.floppy_16px)/* 状态栏图片 */ .setLargeIcon(notifyBitmapTrain)/* 下拉栏内容显示的图片 */ .setContentTitle("title2"); /* 下拉栏显示的标题 */ nMgr.notify(notificationId + 1, nBuilder2.build()); /* 两个id一样的notification不能同时显示,会被新的提示替换掉 */ } }); sendNotification.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String content = editContent.getText().toString(); if (content.equals("")) { content = "U input nothing"; } NotificationCompat.Builder contentBuilder = new NotificationCompat.Builder(getApplicationContext()) .setTicker(content)/* 状态栏显示的提示语 */ .setContentText("I can auto cancel")/* 下拉栏中的内容 */ .setSmallIcon(R.drawable.rain_32px)/* 状态栏图片 */ .setLargeIcon(notifyBitmapTrain)/* 下拉栏内容显示的图片 */ .setContentTitle("Edit title"); /* 下拉栏显示的标题 */ Notification n = contentBuilder.build(); nMgr.notify(notificationId + 2, n); } }); notifyBroadcast.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(BroadcastNotify); sendBroadcast(i); } }); cleanButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nMgr.cancel(notificationId); /* 根据id,撤销notification */ } }); }/** * 点击空白处,软键盘自动消失 */ @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) { inputMgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMgr.hideSoftInputFromWindow( getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } return super.onTouchEvent(event); }@Override protected void onDestroy() { unregisterReceiver(notifyReceiver); super.onDestroy(); } }

MainActivity launchMode="singleInstance";便于返回 activity
【Android入门教程 | Notification 使用】【Android 零基础入门教程视频参考】

    推荐阅读