メッセージプッシュオープンアプリケーションの判断app状態、running_or_exit?


メッセージプッシュオープンアプリケーションの判断app状態、running or exit?
開発の過程でこのような需要があることがよくあります.メッセージが送られてきて、notificationをクリックして、指定されたページにジャンプします.そうすると、問題が発生します.ジャンプの論理はどうですか.一部のアプリケーションは比較的に簡単で、直接アプリケーションを再開して、このように体験するのはよくなくて、もしアプリケーションがすでに開いたら、ただhomeが出て行っただけです.
正しい論理は次のとおりです.
  • は、アプリケーションが実行されているか否かを判断する.
  • Noアプリケーションを直接開いて指定したページにジャンプした場合、Yesは実行中であり、アプリケーションを再起動する必要はありません.
  • 現在のページがジャンプする必要があるページかどうかを判断します.そうでなければ、指定したページにジャンプしようとします.現在のページでは、現在のページの更新内容などが更新される場合があります.

  • 以下に、コードの一部の例を示します.
    public class MyReceiver extends BroadcastReceiver {
    //        
        private boolean isRunning; 
        private ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
        @Override
        public void onReceive(Context context, Intent intent) {
                if(JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
            DLog.i(TAG, "[MyReceiver]          ");
            isRunning = isAppRunning(context);
            if(isRunning){
                //       activity name       
                ComponentName cn = activityManager.getRunningTasks(1).get(0).topActivity;
                if(!cn.getClassName().equals("            "){
                    //    ,    
                    ...
                }else{
                    //   ,         
                    ...
                }
            }
        }
    
        /**
     *   app      
     * @param context
     * @return      
     */
        private boolean isAppRunning(Context context) {
    
        List appTasks = activityManager.getRunningTasks(100);
    
        boolean isAppRunning = false;
        String MY_PKG_NAME = "com.xywy.askforexpert";
    
        for (RunningTaskInfo info : appTasks) {
            if (info.topActivity.getPackageName().equals(MY_PKG_NAME) || info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
                isAppRunning = true;
                Log.i(TAG,info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());
                break;
            }
        }
    
        return isAppRunning;
    
        }   
    }