Sie müssen nachverfolgen, ob sich Ihre App im Vordergrund/Hintergrund befindet und Activity Life Cycle Callback verwendet.
public class SampleApplication extends Application
{
private static int sRunningActivityCount = 0;
@Override
public void onCreate()
{
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks(){
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState)
{
}
@Override
public void onActivityStarted(Activity activity)
{
sRunningActivityCount++;
}
@Override
public void onActivityResumed(Activity activity)
{
}
@Override
public void onActivityPaused(Activity activity)
{
}
@Override
public void onActivityStopped(Activity activity)
{
sRunningActivityCount--;
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState)
{
}
@Override
public void onActivityDestroyed(Activity activity)
{
}
});
}
public static boolean isAppBackground()
{
return sRunningActivityCount == 0;
}
public static boolean isAppForeground()
{
return sRunningActivityCount != 0;
}
}
können Sie die Verwendung folgenden aktivieren/deaktivieren GCM-Benachrichtigungen empfangen:
public void setNotifications(boolean enabled)
{
mPackageManager.setComponentEnabledSetting(new ComponentName(mContext, YourGcmListenerService.class), enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Intent intent = new Intent(mContext, YourGcmListenerService.class);
if (enabled)
{
mContext.startService(intent);
}
else
{
mContext.stopService(intent);
}
}
Ich weiß nicht, ob es eine GCM spezifische Lösung ist, aber man kann immer verwenden 'PacakgeManager' und' setComponentEnabledSetting() '. – CommonsWare