我有一个应用程序,我正在使用GCM,我希望仅在应用程序关闭时收到通知,但是当它的前景不接收时。
有一些功能可以暂时禁用GcmListenerService
吗?
答案 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);
}
}