是否可以禁用GCM服务一段时间?

时间:2016-04-20 20:32:34

标签: android google-cloud-messaging gcmlistenerservice

我有一个应用程序,我正在使用GCM,我希望仅在应用程序关闭时收到通知,但是当它的前景不接收时。

有一些功能可以暂时禁用GcmListenerService吗?

2 个答案:

答案 0 :(得分:1)

你做错了。当您的应用收到GCM消息时,这无关紧要。在你的情况下,当它对它做出反应时更重要。因此,我没有禁用您的应用程序组件,而是简单地放置一些逻辑,这些逻辑可以在某些条件下忽略消息(比如它在前台)或在这种情况下以不同方式处理它们。对我来说,这看起来比完全失聪的应用程序更好。

答案 1 :(得分:0)

您必须使用“活动生命周期”回调来跟踪您的应用是否处于前台/后台。

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

}

您可以使用以下命令启用/禁用接收GCM通知:

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