Notification点击跳转指定界面(APP被杀死或双击退出时唤醒,然后跳转)

现有如下需求:
后台做一个推送,APP收到后以notification的形式展示,用户点击,跳转到指定界面。

需求简单,但是有些细节,确是要在写的时候,通过大量测试才能知道。
1、如果用户双击退出了,这个时候,APP并没有被系统杀死,点击手机上的菜单键,可以看到它还在系统中存活着,这个时候,如果点击notification去跳转指定界面(如:Activity1),会直接打开,但是用户点击返回键的时候,会立刻结束这个Activity,回到手机桌面。
2、如果用户在APP被清理、杀死的情况下收到推送,展示了一个notification(用三方的可以做到这样),这个时候用户点击,会唤醒APP,但是最后停到APP首页,并没有去指定界面。

经过测试今日头条美团的notification消息(有了推送不立刻点,调整到我想要的状态再去点击),模拟的写了个处理方法,最后效果差不多

要跳转的界面,肯定不止一个,暂定3个Activity,1-3,创建一个bean,创建跳转工具类等进行操作。

特别注意!
特别注意!
特别注意!
本来这个说明,计划写在最后,不过担心看到下面就没耐心了,就提前到前面!
说明:
注意清单文件中,唤醒中转界面:AwakeTempActivity的启动模式,是android:launchMode=”singleTask”。不要用默认的。
经大量测试发现,以下情况,点通知栏不会跳转,需要这样设置AwakeTempActivity的启动模式才能解决
1、(此方法复现率100%)启动APP,双击退出(不要杀死),后台推送2条(及以上),手机上点击其中一条,APP被唤醒并去到指定界面,然后点击其他通知,不会跳转;
2、(此方法复现率很高)启动APP,双击退出(不要杀死),后台推送,手机收到后,启动APP,APP稳定到首页后,点击收到的推送,此时不会跳转到指定界面

其他:
目前我知道的,有5种方法可以唤醒指定APP:h5唤醒,需要清单文件中做一定的配置,这个我在前面博客中写过,不多说了;广播(如果用notification,因为有PendingIntent,发广播貌似效果不好(我没测试错误的话))。剩下的3种,在AwakeTempActivity中都提到了。需要注意的是,第二种方法,需要清单文件中做一些设置,配合使用(详见注释以及下面代码)。其他的不用。

目录结构:
这里写图片描述

说明:
Activity1-3,是要去的目标页面,其中,Activity_2特殊,在那个界面,就算收到消息,也不做提示和展示,用于模拟特殊界面

代码实现:
Activity1-3,是测试的,不做多余操作。他们3个的代码一样

package com.chen.demo2;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class Activity_1 extends Activity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

}

MyApplication

package com.chen.demo2;

import android.app.Activity;
import android.app.Application;
import android.os.Bundle;


public class MyApplication extends Application {
   

    private Activity app_activity = null;

    private static MyApplication mContext = null;

    @Override
    public void onCreate() {
        super.onCreate();

        mContext=this;

        initGlobeActivity();

    }

    /**
     * 获取栈顶Activity
     */
    private void initGlobeActivity() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            }

            @Override
            public void onActivityStarted(Activity activity) {
            }

            @Override
            public void onActivityResumed(Activity activity) {
                app_activity = activity;

            }

            @Override
            public void onActivityPaused(Activity activity) {
            }

            @Override
            
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值