![](/img/trans.png)
[英]Android : How to prevent to call again selected activity again from background to foreground after the selection of the result?
[英]Android: how to prevent activity from starting in background and comming to foreground
在我的應用程序中,我有一個系統可以在應用程序中的任何位置顯示對話框,甚至可以從輔助線程顯示對話框。當我從服務器收到一些通知時,我只是將對話框置於用戶的眼前(對話框顯示在從應用程序上下文打開的透明活動)。 我的問題是,當應用程序在后台運行並從服務器接收信號時,它將啟動包含對話框的透明活動,因此應用程序進入前台-這違反了android(and my)規則。
我創建了一個通知系統,因此狀態欄顯示了來自服務器的傳入消息。 我與通知關聯了透明活動(用於保存對話框),因此當用戶單擊通知時,將被帶到對話框。
Intent notificationIntent = new Intent(CVSApplication.getInstance(), CVSDialogActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(CVSApplication.getInstance(), 0, notificationIntent, 0);
問題是,即使用戶沒有單擊通知,該應用程序還是會出現在最前面。
有什么方法可以防止在調用startActivity時CVSDialogActivity從backgound返回? 這是啟動CVSDialogActivity的意圖:
intent = new Intent(app, CVSDialogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(USE_CUSTOM_CONTENT, false);
intent.putExtra(INSTANCE, this.hashCode());
我也嘗試了這種變體:
intent = new Intent(app, CVSDialogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_FROM_BACKGROUND);
intent.putExtra(USE_CUSTOM_CONTENT, false);
intent.putExtra(INSTANCE, this.hashCode());
,但是當調用startActivity(intent)時,該應用程序將顯示在最前面。(我想在后台顯示包含對話框的活動,並且在用戶單擊通知時將應用程序顯示在前台)。
謝謝,亞歷克斯
我找到了解決此問題的方法。 我創建了一個系統,該系統告訴我應用程序是否在后台(使用正在運行的進程),如下所示:
public boolean isInBackground(){
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses= activityManager.getRunningAppProcesses();
for (RunningAppProcessInfo appProcess : appProcesses) {
PackageInfo p = null;
try {
p = this.getPackageManager().getPackageInfo(appProcess.pkgList[0], PackageManager.GET_PERMISSIONS);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if(p != null && p.packageName.equals(getPackageName()) && appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!Is in background: false");
return false;
}
}
System.out.println("!!!!!!!!!!!!!!!!!!!!!Is in background: true");
return true;
}
現在,如果我在后台,則不會啟動對話框,而只會啟動通知,並且在按下通知時,會將應用程序置於最前面,並向用戶顯示該對話框。
亞歷克斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.