Notification 小解

好久没写了,争取在三月底把第一行代码看完并且把过程写成博客。

一、通知栏的创建

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);前面的,否则会失效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值