2017-12-13 15 views
1

앱을 닫거나 실행중인 경우 알림을 표시하려고합니다 (대화 상자를 클릭하면 활동이 열립니다). 열려 있거나 실행 중일 경우 알림을 표시하려고합니다. 전경에서 직접 대화 상자를 보여주고 싶습니다.앱이 실행 중일 때 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

전경이나 배경에 활동이 있는지 확인할 수 있습니다. [way] llowing (https://stackoverflow.com/a/18469643/5308778) – Lucky

답변

1

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

망가 응용 프로그램 클래스의 AndroidManifest를에 항목을 만들기 위해 잊지 사용자 정의 응용 프로그램 클래스를 구현합니다.

프로젝트의 모든 활동에 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