• Android 响应notification事件


    两种情况,第三种情况,类似于微信,点击消息,跳到聊天框,退出后回到主页

    第一种情况就是:

    点击Notification ——>进入secActivity ——> back键 ——> 退出应用

    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,  intent, PendingIntent.FLAG_CANCEL_CURRENT);  

    第二种情况:

    点击Notification ——>进入secActivity ——> back键 ——> 退到mainActivity ——>back键 ——>退出应用

    需要添加intent数组,这里是两个单位,所以先打开的是secActivity(intent[1]),

    需要在Manifest中对指定的Activity设置属性

    <activity android:name=".secActivityl"
            android:launchMode="singleTask"
            android:taskAffinity=""
            android:excludeFromRecents="true">
    </activity>

    PendingIntent提供了个静态方法getActivities,里面可以设置一个Intent数组,用来指定一系列的Activity。

    Intent[] makeIntentStack(Context context) {
        Intent[] intents = new Intent[2];
        intents[0] = Intent.makeRestartActivityTask(new ComponentName(context, com.example.notificationtest.MainActivity.class));
        intents[1] = new Intent(context,  com.example.notificationtest.SubActivity.class);
        return intents;
    }

    其中需要注意的是Intent.makeRestartActivityTask方法,这个方法用来创建activity栈的根activity

    接下来,创建并显示Notification:

    void showNotification(Intent intent) {
        Notification notification = new Notification(
                R.drawable.status_icon, 
                "消息栏顶部标题",
                System.currentTimeMillis());
    
        PendingIntent contentIntent = PendingIntent.getActivities(
                this,
                0,
                makeIntentStack(this), 
                PendingIntent.FLAG_CANCEL_CURRENT);
        notification.setLatestEventInfo(
                this, 
                "下拉消息栏标题",
                "消息内容", 
                contentIntent);
        notification.flags |= Notification.DEFAULT_ALL;
    
        mNM.notify(1, notification);
    }

     第三种:

    点击Notification ——>进入mainActivity——>根据bundle信息——>进入secActivity ——> back键 ——> 退到 mainActivity——>back键 ——>退出应用  

    这里需要注意的是,当点击notification的时候,应用是否已经在栈中

    1.如果应用不在,也就是未打开状态,那么使用singltask模式打开,bundle消息可以在onstart中获取

    2.如果应用已经在前台,那么点击notification是不会出发onstart更新intent消息的,需要使用

    @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            Log.e("tag", "onNewINtent执行了");
            setIntent(intent);
            String ringName = intent.getStringExtra("ringName");
            Log.e("tag", ringName+"传过来的值");
            if (ringName != null) {
                pager.setCurrentItem(1);
            }
        }
  • 相关阅读:
    加载器学习记录
    日常记录
    php实现银联支付
    PHP 判断密码强度
    laravel artisan 命令列表
    PHP && ,and ,||,or 的区别
    数组与对象的转换
    正则表达式
    微信退款
    laravel when 的用法
  • 原文地址:https://www.cnblogs.com/bkycjj/p/5031342.html
Copyright © 2020-2023  润新知