1

在我的應用程序中,我有一個系統,我可以從應用程序中的任何位置顯示對話框,甚至可以從輔助線程顯示對話框。當我收到來自服務器的一些通知,我只是將對話框放在用戶眼前(對話框顯示在從應用程序上下文打開的透明活動中)。我的問題是,當應用程序在後臺並從服務器接收信號時,它會啓動包含對話框的透明活動,所以應用程序會在前臺顯示 - 這是違反android(和我的)規則的。Android:如何防止活動在後臺啓動並前往

我創建了一個通知系統,以便顯示來自服務器的收件人是狀態欄。 我與透明活動(持有對話框)的通知相關聯,所以當用戶點擊通知時,會被帶到對話框。

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? 這裏是一個開始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(意向)被稱爲應用程序被帶到前面(我想顯示包含對話框的活動,但在後臺,以及當用戶點擊通知時,將應用程序放到前臺)。

謝謝, 亞歷克斯

回答

0

我已經找到一種方法來解決這個問題。我創建了一個系統,它告訴我,如果應用程序是在背景或沒有(使用正在運行的進程)就像這樣:

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; 
} 

現在,如果我在後臺,我就不展開對話,我將開始只是通知,並且當通知被按下時,應用程序被帶到前面,並且對話框被顯示給用戶。

Alex。

相關問題