背景:

  今天在学习Android Notification 的时候,发现《第一行代码》书中所用的getNotification方法被弃用了,另一个setLatestEventInfo完全过时了,所以我在网上找了一下最新的用法,这里简单总结一下。

(先挖个坑,以后有时间再总结复杂用法)


正文:

1、开始先做好准备工作:新建一个工程,然后在activity_main.xml中加上一个按钮做测试用。

<Button
     android:id="@+id/send_notice"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="SEND_NOTICE"
     />


2、新建一个activity_notification.xml文件和一个NotificationActivity.java文件

 activity_notification.xml也就是点击通知以后跳转到的页面的视图,这里仅作为展示,我们加入一个TextView即可

<TextView
 <TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="30sp"
     android:text="This is notification layout"/>
 />

 

NotificationActivity.java中OnCreate()加入

SetContentView(R.layout.activity_notification);
SetContentView(R.layout.activity_notification);


3、然后在MainActivity中进行获取界面组件,设置点击事件监听,写出点击操作

....//此处为各种引入包名,我就不写出来了
 
 public class MainActivity extends Activity implements View.OnClickListener {
     private Button send;
     @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 
     send = (Button)findViewById(R.id.send_notice);
     send.setOnClickListener(this);
 }
 @Override
 public void onClick(View v) {
     switch (v.getId()){
         case R.id.seng_notice:
         {
             //NotificationManager对象用于管理Notification的发送消除等操作
             NotificationManager manager = 
                             (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
             //创建一个Builder构造类
             Notification.Builder mBuilder = new Notification.Builder(this);
             //定义Notification的Action
             mBuilder.setTicker("This is Ticker title")//这里是通知在顶部一闪而过时出现的内容
                     .setContentTitle("This is Content title")//这里是用户下拉通知栏查看通知是看到的标题
                     .setContentText("This is Content text")//这里是通知栏里通知的具体内容
                     .setWhen(System.currentTimeMillis())//这里是显示当前系统时间。
                     .setSmallIcon(R.mipmap.ic_launcher);//通知左侧的图标,测试用的是默认的android机器人图标
             //下面设置通知栏点击事件
             Intent intent = new Intent(this,NotificationActivity.class);
             PendingIntent mPendingIntent = PendingIntent.getActivity(this,0,intent,0);
             mBuilder.setContentIntent(mPendingIntent);
             
             //发送通知,第一个参数直接用1代替了,表示给每条通知设置的id
             //这里需要注意,第二个参数我在使用的时候报错了,因为我设置的minSDK为14,改成16以上,然后clean
             manager.notify(1,mBuilder.builder);
             
             break;
                    
         }
         default:
             break;
     }
 }
....//此处为各种引入包名,我就不写出来了
 
 public class MainActivity extends Activity implements View.OnClickListener {
     private Button send;
     @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 
     send = (Button)findViewById(R.id.send_notice);
     send.setOnClickListener(this);
 }
 @Override
 public void onClick(View v) {
     switch (v.getId()){
         case R.id.seng_notice:
         {
             //NotificationManager对象用于管理Notification的发送消除等操作
             NotificationManager manager = 
                             (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
             //创建一个Builder构造类
             Notification.Builder mBuilder = new Notification.Builder(this);
             //定义Notification的Action
             mBuilder.setTicker("This is Ticker title")//这里是通知在顶部一闪而过时出现的内容
                     .setContentTitle("This is Content title")//这里是用户下拉通知栏查看通知是看到的标题
                     .setContentText("This is Content text")//这里是通知栏里通知的具体内容
                     .setWhen(System.currentTimeMillis())//这里是显示当前系统时间。
                     .setSmallIcon(R.mipmap.ic_launcher);//通知左侧的图标,测试用的是默认的android机器人图标
             //下面设置通知栏点击事件
             Intent intent = new Intent(this,NotificationActivity.class);
             PendingIntent mPendingIntent = PendingIntent.getActivity(this,0,intent,0);
             mBuilder.setContentIntent(mPendingIntent);
             
             //发送通知,第一个参数直接用1代替了,表示给每条通知设置的id
             //这里需要注意,第二个参数我在使用的时候报错了,因为我设置的minSDK为14,改成16以上,然后clean
             manager.notify(1,mBuilder.builder);
             
             break;
                    
         }
         default:
             break;
     }
 }


 

        完成以上,点击Run。点击SEND_NOTICE按钮,通知栏成功出现Notification!,点击通知可以进入Notification页面,可是这时候我们会发现,虽然点进去了,可是通知栏里的通知并没有消失,所以我们需要再补充一点

找到NotificationActivity.java,在OnCreate()方法下加上下面两段代码:

 

NotificationManager manager = 
                             (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  manager.cancel(1);//这个1就是上面我们在notify中写入的第一个参数ID
NotificationManager manager = 
                             (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  manager.cancel(1);//这个1就是上面我们在notify中写入的第一个参数ID



再次运行,完美实现~

PS:网速实在不给力,另外我要吐槽一下OSChina的这个博客WEB编辑,竟然不能统一设置字体样式和大小,真是够难受的。