背景:
今天在学习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编辑,竟然不能统一设置字体样式和大小,真是够难受的。