2017-12-13 8 views
1

アプリが閉じられているか、バックグラウンドで実行されているが、開いているか実行中の場合は、通知を表示しようとしています(クリックするとダイアログが表示されます)私は前景に直接ダイアログを表示したい。Appが実行中の場合はBroadcastReceiverでダイアログを表示

私はこのコードを持っている:

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    if (RunningHelper.isAppRunning(context, Constants.PROJECT_NAME)) 
    { 
     Log.d("Running", "--------APP RUNNING"); 


    } 
    else 
    { 

     Log.d("Running", "--------APP NOT RUNNING"); 
     showNotification(); 
    } 
} 

マイRunningHelper:

public static boolean isAppRunning(final Context context, final String packageName) { 
    final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); 
    if (procInfos != null) 
    { 
     for (final ActivityManager.RunningAppProcessInfo processInfo : procInfos) { 
      if (processInfo.processName.equals(packageName)) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

問題は、アプリケーションは常にその検出であるが、(onReceiveを実行している)、のための任意の手掛かりはそれを正しく行うに誰かをお持ちですか?ありがとう。

+1

フォアグラウンドまたはバックグラウンドのアクティビティがfoで確認できます([https://stackoverflow.com/a/18469643/5308778] – Lucky

答えて

1

はいけない、あなたのアプリケーションクラスのAndroidManifestにエントリを作成することを忘れ

public class ProjectApplication extends Application { 

    public static boolean isActivityVisible() { 
    return activityVisible; 
    } 

    public static void activityResumed() { 
    activityVisible = true; 
    } 

    public static void activityPaused() { 
    activityVisible = false; 
    } 

    private static boolean activityVisible; 
} 

カスタムアプリケーションのクラスを実装します。

プロジェクト内のすべての活動にonPauseおよびonResumeを追加したり、放送を受信したとき、あなたはBaseActivity

@Override

protected void onResume() { 
    super.onResume(); 
    ProjectApplication.activityResumed(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    ProjectApplication.activityPaused(); 
} 

とを拡張する必要がありますAppCompatActivity/FragmentActivityし、すべてのプロジェクト活動の延長BaseActivityを作成することができますアクティビティがフォアグラウンドであるかバックグラウンドであるかを確認できます

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    if (ProjectApplication.activityVisible)  { 
    // application is in foreground and running 
    // do stuff here 
    } 
    else 
    { 
     // application is in background 
    // do stuff here 

    } 
} 
+0

パーフェクト!ありがとうございます! – MachuSnz

+1

@MachuSnzハッピーコーディング – Lucky

関連する問題