从通知里启动应用的activity,返回时返回应用的主界面

来源:互联网 发布:淘宝可以刷信用卡吗 编辑:程序博客网 时间:2024/05/16 16:14

其实这个开发主要是一种开发思路:我的思路大致是这样的。
1. 首先在启动这个具体的activity之前,判断当前应用是否在栈顶,如果在,就不启动主Activity了,如果不在则启动主Activity;
2. 启动通知具体指向的Activity

启动通知具体指向及启动主Activity的具体代码:

   Intent i = new Intent();  startHomeActivity(context);                        MobclickAgent.onEvent(context, "TabMain_InsuranceDeduction");                        i.setClass(context, GetInsuranceRequestActivity.class);                          i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);            if (i.getComponent() != null || i.getAction() != null)                context.startActivity(i);

实际上,上述代码可能会启动两个Activity,原因是:如果当前应用不在栈顶,则先启动主Activity,然后在启动具体指向的Activity;如果在栈顶,则只启动具体的Activity

判断当前Activity是否在栈顶的具体代码如下:

    private void startHomeActivity(Context context){        if (!isAppOnForeground(context)){            Intent homeIntent = new Intent(context, HomeActivity.class);            homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);            context.startActivity(homeIntent);        }    }    public boolean isAppOnForeground(Context context) {        ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);        List<ActivityManager.RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);        if (tasksInfo.size() > 0) {            // 应用程序位于堆栈的顶层            if (context.getPackageName().equals(tasksInfo.get(0).topActivity                    .getPackageName())) {                return true;            }        }        return false;    }
0 0
原创粉丝点击