好久没写了,争取在三月底把第一行代码看完并且把过程写成博客。
一、通知栏的创建
1.首先需要一个NotificationManager 来对通知进行管理,可以调用Context的getSystemService()获取到,参数一般我们选用NOTIFICATION_SERVICE。
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2.创建Notification对象,一般有两种方法(①方法使用较多)
①使用NotificationCompat.Builder()方法创建
Notification notification = null ;
try {
notification = new NotificationCompat.Builder(MainActivity.this)
//设置标题
.setContentTitle("title")
//设置内容
.setContentText("text")
//设置通知栏打开的Intent
.setContentIntent(pi)
//图标
.setSmallIcon(R.mipmap.ic_launcher).build();
} catch (Exception e) {
e.printStackTrace();
}
②创建一个Notification对象,来存储通知所需的各种信息,我们可以使用它的有参构造函数来进行创建。
第一个参数标识通知栏的图标,第二个参数标识通知栏的瞬时通知信息,第三个参数用于指定创建时间。
Notification notification = new Notification(R.mipmap.ic_launcher, "notifition", System.currentTimeMillis());
只有还要设置Notification的布局,通过setLatesEventInfo()方法来设置。第一个参数为context,第二个参数为title,第三个参数为text,第四个先用不到,传入null
notification.setLatesEventInfo(context,"this is title","this is text",null);
3.调用NotificationManager的notify()方法让通知栏显示出来。notify()方法接受两个参数,第一个参数为id,要保证每一个通知的id为独一无二的(方便之后删除通知),第二个则为Notification对象
manager.notify(1,notification);
完整代码:
MainActivity:
public class MainActivity extends ActionBarActivity {
NotificationManager manager;
Notification notification;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//Notification notification = new Notification(R.mipmap.ic_launcher, "notifition", System.currentTimeMillis());
notification = null ;
try {
notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("title")
.setContentText("text")
//图标
.setSmallIcon(R.mipmap.ic_launcher).build();
} catch (Exception e) {
e.printStackTrace();
}
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
manager.notify(1, notification);
}
});
}
}
二、为通知栏设置点击效果
1.通过PendingIntent来设置通知栏的设置点击效果。PendingIntent有三个方法:getActivity()方法、getBroadcast()方法、getService()方法。看需求选用这三个方法。三个方法参数相同,第一个为context,第二个一般用不到,传入0即可,第三个参数是一个Intent对象,我们可以通过这个Intent对象来构造出PendingIntent的意图,第四个参数用于确定PendingIntent
Intent intent = new Intent(MainActivity.this,NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
2.创建通知栏时,方法①则直接在builder中加入.setContentIntent(pendingIntent)
方法②则将setLatesEventInfo()方法最后一个参数改为pendingIntent对象即可。
3.别忘了在AndroidManifest中注册跳转的NotificationActivity
4.如果想要点击一次通知栏之后通知栏就消失,则修改Notification代码
加入下面这段代码。
NotificationManager manager = (NotificationManager)getSystemService((NOTIFICATION_SERVICE));
manager.cancel(1);
三、为通知栏提示设置声音震动
1.设置声音
再通知栏显示的时候如果我们想要播放制定音频文件,则需要先获取到音频文件对应的Uri,在通过notification.sound = soundUri来设置
Uri soundUri = Uri.fromFile(new File("/..."));
notification.sound = soundUri
2.设置振动
振动使用的是vibrate属性,是一个长整型数组,以毫秒为单位,第一个参数表示手机静止的时常,第二个参数表示手机振动的时常,第三个参数标识手机静止的时常。。。以此类推。如果想让手机收到通知时振动一秒,静止一秒,再振动一秒:
long[] virbrates = {0,1000,1000,1000};
notification.virbrate = virbrates;
振动是要声明权限的
<uses-permission android:name="ANDROID.PERMISSION.VIBRATE"></uses-permission>
3.注意振动,播放音频的代码是要放到manager.notify(1, notification);
前面的,否则会失效。