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