notification 通知栏 及BroadcastReceiver 的使用

创建通知栏

 

  /**
     * 初始化通知栏
     */
    private NotificationManager notificationManager;
    static String PALYER_TAG;
    public Notification notification;

    private void initNotification() {
        /*通知栏的布局*/
        RemoteViews contentView = new RemoteViews(getPackageName(),
                R.layout.notification_control);
        contentView.setImageViewResource(R.id.iv_pic, R.mipmap.icon_app);//图片展示
        contentView.setImageViewResource(R.id.iv_play, R.mipmap.zant1);//button显示为正在播放

        /*创建通知栏的点击事件*/
        Intent notificationIntent = new Intent(getApplicationContext(), NotificationBroadcastReceiver.class);
        notificationIntent.setAction("notification_clicked");
        notificationIntent.putExtra(NotificationBroadcastReceiver.TYPE, 1);
        PendingIntent intent = PendingIntent.getBroadcast(getApplicationContext(), 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT);

        /*滑动删除通知栏后,广播监听*/
        Intent dele = new Intent(getApplicationContext(), NotificationBroadcastReceiver.class);
        dele.setAction("notification_cancelled");
        dele.putExtra(NotificationBroadcastReceiver.TYPE, 1);
        PendingIntent deletIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, dele, PendingIntent.FLAG_ONE_SHOT);


        /*创建*/
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), "music");
        mBuilder.setContent(contentView)
                .setSmallIcon(R.mipmap.icon_app)
                .setWhen(System.currentTimeMillis())// 通知栏时间,一般是直接用系统的
                .setPriority(Notification.DEFAULT_ALL)//
                .setContentIntent(intent)//点击事件
                .setDeleteIntent(deletIntent);//滑动事件
        notification = mBuilder.build();
//        notification.flags = notification.FLAG_NO_CLEAR;//设置通知点击或滑动时不被清除
        notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(PALYER_TAG, 111, notification);//开启通知

    }

 

/**
 * 佛祖保佑        永无BUG
 * 佛曰:
 * 程序园里程序天,程序天里程序员;
 * 程序猿人写程序,又拿程序换肉钱。
 * 肉饱继续桌前坐,饱暖还是桌前眠;
 * 半迷半醒日复日,码上码下年复年。
 * 但愿叱咤互联世,不愿搬砖码当前;
 * 诸葛周瑜算世事,我算需求得加钱。
 * 别人笑我忒直男,我说自己是程猿;
 * 但见成都府国内,处处地地程序员。
 * 作者:水东流 编于 2018/8/23
 * <p>
 * 音乐播放状态栏点击和滑动监听
 */

public class NotificationBroadcastReceiver extends BroadcastReceiver {
    public static final String TYPE = "type"; //这个type是为了Notification更新信息的,这个不明白的朋友可以去搜搜,很多

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        int type = intent.getIntExtra("type", -1);
        if (type != -1) {
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.cancel(type);
        }

        if (action.equals("notification_clicked")) {
            //处理点击事件
            Intent intent1 = new Intent(context, MusicActivity.class);
            intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);
        }

        if (action.equals("notification_cancelled")) {
            //处理滑动事件
            Intent intent2 = new Intent(context, MusicService.class);
            intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.stopService(intent2);
        }

    }
}

 

广播注册

androidManfest 中静态注册

<!--关闭通知栏,通知音乐服务,关闭-->
<receiver android:name=".NotificationBroadcastReceiver">
    <intent-filter>
        <action android:name="notification_cancelled"/>
        <action android:name="notification_clicked"/>
    </intent-filter>
</receiver>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值