推送跳转到对应的详情页(使用友盟推送的方式)

友盟推送到通知栏,点击对应的通知栏跳转,分为两种情况,应用存在的时候直接跳转到页面,不存在的时候打开应用再跳转到对应页面。

ps:由于详情页需要对应的登录信息,所有需要打开应用自动登录获取对应的信息。如果只是一个简单的详情页面无需如此操作。

以下代码舍去其他的友盟推送部分的东西,单纯跳转进程处理的逻辑。

1.监测app进程,使用ActivityLifecycleCallbacks

public class MyApplication extends Application{

    private int isBackCount;
    private int isHaveCount;
    private static ENameApplication instance;
    private Activity currentActivity;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        registerActivityLife();
    }

 private void registerActivityLife() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
            }

            @Override
            public void onActivityStarted(Activity activity) {
                isHaveCount++;
            }

            @Override
            public void onActivityResumed(Activity activity) {
                currentActivity = activity;
                isBackCount++;

            }

            @Override
            public void onActivityPaused(Activity activity) {
            }

            @Override
            public void onActivityStopped(Activity activity) {
                isBackCount--;

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                isHaveCount--;
            }
        });
    }

    //推送的位置可以拿到当前显示的页面
    public Activity getCurrentActivity() {
        return currentActivity;
    }

    public int getIsBackCount() {
        return isBackCount;
    }

    public int getIsHaveCount() {
        return isHaveCount;
    }





}

2.在推送处理点击事件的位置

public class NotificationBroadcast extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
//获取对应的信息
        String message = intent.getStringExtra(EXTRA_KEY_MSG);
        int action = intent.getIntExtra(EXTRA_KEY_ACTION,
                EXTRA_ACTION_NOT_EXIST);
 try {
            UMessage msg = new UMessage(new JSONObject(message));
            if (action == ACTION_CLICK) {
                UTrack.getInstance(context).trackMsgClick(msg);
                Map<String, String> map = msg.extra;
                String which = map.get("msgtype");
                switch (which) {
                    case "1"://看自己的需求
                        Intent domainIntent = null;
                        if (isAppAlive()) {
                            domainIntent = new Intent(context, DetailActivity.class);
                        } else {
                            domainIntent = new Intent(context, FlashActivity.class);
                        }
                        domainIntent.putExtra("msg1", "msg");
                        domainIntent.putExtra("toActivity", "detail");
                        context.startActivity(domainIntent);
                        break;

                }

            } else if (action == ACTION_DISMISS) {
                UTrack.getInstance(context).trackMsgDismissed(msg);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

   /**
     * 判断应用是否存在
     */
    private boolean isAppAlive() {
        if (ENameApplication.getInstance().getIsHaveCount() > 0) {
            return true;
        }
        return false;
    }


}

3.点击通知栏,应用存在则跳转到对应页面,以下是处理不存在打开应用跳转到对应详情页的逻辑。

FlashActivity.class中的操作。

//应用一般都有个启动页面,然后跳转到首页
Intent intent = getIntent().setFlags(0);//将原来的参数携带过来
intent.setClass(this, MainActivtiy.class);
//携带其他数据
intent.putExtra("othermsg", othermsg);
startActivity(intent);

然后在MainActivity中处理对应的跳转操作。

String flag = getIntent().getStringExtra("toActivity");
switch (flag) {
    case 'detail': 
        Intent intent=getIntent();
        intent.setClass(this,DetailActivity.class);
        startActivity(intent);
        break;
}

getIntent().setFlags(0);

getIntent()能够获取到其他页面跳转到当前页面携带的参数。

但是存在一种情况,当前页面是启动页面,即不是由其他页面跳转过来的,是桌面启动的。

第一次启动的时候直接使用getIntent()的时候就会发生闪退,第二次之后就不会。

具体原因不清楚,使用getIntent().setFlags(0);即可解决对应的问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值