1. 程式人生 > >從通知裡啟動應用的activity,返回時返回應用的主介面

從通知裡啟動應用的activity,返回時返回應用的主介面

其實這個開發主要是一種開發思路:我的思路大致是這樣的。
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; }