1

私のアプリでは、アプリケーションのどこからでもダイアログを表示することができます。セカンダリスレッドからでもダイアログを表示できます。私は、ユーザーの目の前にダイアログを表示します(ダイアログは、アプリケーションコンテキストから開いた透明なアクティビティで表示されます)。私の問題は、アプリがバックグラウンドでサーバからの信号を受信すると、ダイアログを含む透過的なアクティビティを開始するので、アプリケーションはフォアグラウンドになります。これはアンドロイド(および私)のルールに反するものです。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) 
     .addFlags(Intent.FLAG_FROM_BACKGROUND); 
intent.putExtra(USE_CUSTOM_CONTENT, false); 
intent.putExtra(INSTANCE, this.hashCode()); 

が、startActivity(意図)が呼び出されたときにアプリが前面に表示される(:

intent = new Intent(app, CVSDialogActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.putExtra(USE_CUSTOM_CONTENT, false); 
intent.putExtra(INSTANCE, this.hashCode()); 

私も、このバリアントを試してみました。ダイアログを含むアクティビティをバックグラウンドで表示し、ユーザが通知をクリックしてアプリをフォアグラウンドにする)。私はこれを解決する方法を見つけた

おかげで、 アレックス

答えて

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

私はバックグラウンドで午前ならば、私はダイアログを起動しませんが、私は唯一の通知を開始します通知が押されると、アプリケーションが前面に表示され、ダイアログがユーザーに表示されます。

アレックス。