2016-05-19 4 views
1

私はonCreateメソッドで、アクティビティがフォアグラウンドかバックグラウンドかをチェックする必要があるアクティビティを持っています。アクティビティがフォアグラウンドにある場合、私はリクエストをサーバーに送信しなければならず、アプリケーションがバックグラウンドになると、インテントサービスを通じてリクエストしてください。どうすればいいですか?アクティビティがアンドロイドでフォアグラウンドかバックグラウンドかを確認するにはどうすればいいですか?

アプリがフォアグラウンドにあるバックグラウンドストップサーバーのリクエストに含まれる場合はありますか。

+0

可能な公約http://stackoverflow.com/questions/34453133/how-to-start-launcher-activity-after-app-goes-to-background/34453412#34453412 – Dhiraj

+0

私は持っているリンクを見てください – Dhiraj

答えて

1

アプリがフォアグラウンドまたはActivity.onPause、Activity.onResume方法を使用して自分で自分のアプリケーションのではない

public static boolean isAppInForeground(Context ctx) { 
    ActivityManager activityManager = (ActivityManager) ctx 
      .getApplicationContext().getSystemService(
        Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> services = activityManager 
      .getRunningTasks(Integer.MAX_VALUE); 

    if (services == null) { 
     return false; 
    } 

    if (services.size() > 0 
      && services.get(0).topActivity 
        .getPackageName() 
        .toString() 
        .equalsIgnoreCase(
          ctx.getApplicationContext().getPackageName() 
            .toString())) { 
     return true; 
    } 

    return false; 
} 
+0

が提供されていますが、アプリケーションがバックグラウンドで実行されるときの条件を作成するには、IntentServiceを渡す必要があります。 – Rajesh

+0

フォアグラウンドとバックグラウンドの両方の条件に 'WakefulIntentService'を使用して管理できます。 –

0

トラック視界にあるチェックのためにこれを試してみてください。

例カスタムアプリケーションクラスの実装:AndroidManifest.xml

でアプリケーションクラスを登録してから、このような何かよう

public class MyApplication extends Application { 

    public static boolean isActivityVisible() { 
    return activityVisible; 
    } 

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

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

    private static boolean activityVisible; 
} 

を:

@Override 
protected void onResume() { 
    super.onResume(); 
    MyApplication.activityResumed(); 
} 

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

最善のアプローチは次のようになりあなたはonSであなたのサービスを引き起こすべきですサービスがonStatCommand()のロジックを開始するとあなたのアクティビティのtop()コールが実行され、サービスがアプリケーションライフサイクルに依存しないようにするには、onStatCommand()でSTART_STICKYを返します。

-1

チェックthisライブラリ。現在の活動状況を把握することができます。

0

ここではApplicationクラスを使用したソリューションです。

public class AppSingleton extends Application implements Application.ActivityLifecycleCallbacks { 

private WeakReference<Context> foregroundActivity; 


@Override 
public void onActivityResumed(Activity activity) { 
    foregroundActivity=new WeakReference<Context>(activity); 
} 

@Override 
public void onActivityPaused(Activity activity) { 
    String class_name_activity=activity.getClass().getCanonicalName(); 
    if (foregroundActivity != null && 
      foregroundActivity.get().getClass().getCanonicalName().equals(class_name_activity)) { 
     foregroundActivity = null; 
    } 
} 

//............................ 

public boolean isOnForeground(@NonNull Context activity_cntxt) { 
    return isOnForeground(activity_cntxt.getClass().getCanonicalName()); 
} 

public boolean isOnForeground(@NonNull String activity_canonical_name) { 
    if (foregroundActivity != null && foregroundActivity.get() != null) { 
     return foregroundActivity.get().getClass().getCanonicalName().equals(activity_canonical_name); 
    } 
    return false; 
} 
} 

あなたが必要な活動への参照を持っているか、活動の正規名を使用している場合、あなたはそれがフォアグラウンドでだかどうかを調べることができます。この解決策は完全ではないかもしれません。したがって、あなたのコメントは本当に歓迎です。

関連する問題