從通知裡啟動應用的activity,返回時返回應用的主介面
阿新 • • 發佈:2019-01-28
其實這個開發主要是一種開發思路:我的思路大致是這樣的。
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;
}