我在安卓上玩游戏。我正在使用 gcm 推送通知,基本上我对推送所做的是检查它们的内容,以了解推送是否有赢家或输家价值,是否有赢家价值并且用户在屏幕上“等待结果”应用程序转到其他活动屏幕(等待或失败屏幕取决于推送值)。所以架构是:
如果用户在等待屏幕上,并且 push 进入推送屏幕值。
一切都在 android 4.2.x 上完美运行,但在 4.1.x 和最早的版本(我支持的最后一个版本是 2.3.6)上,当推送到来并且设备处于睡眠模式时,在这种情况下( api<16 ,推送来了)并且设备处于睡眠模式)应用程序关闭,而不是错误仅关闭,我需要重新启动它。为了解决这个问题,我写了以下几行并强制 tha 应用程序运行,并且运行良好,但现在的问题是屏幕总是打开,从不进入睡眠模式,并且,你可以想象,如果您在那一刻不玩,电池会很快耗尽。我对新实现的问题的架构是:
当 android 版本<4.1.x 并且屏幕处于睡眠模式时。推送来了,屏幕打开(总是)等待用户屏幕解锁。
我的问题是:您对为什么应用程序在 api<16 上关闭有任何想法吗?你有其他的实现思路吗?
GcmIntentService 中的这个函数扩展了 IntentService 类,在推送通知有获胜值的情况下运行
if(win){
DataStore.userRefereeWin=true;
if (currentUserSituation().contains("Waiting") && (android.os.Build.VERSION.SDK_INT < 16)){
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();
}
sound = Uri.parse("android.resource://" + getPackageName() + "/" + whatWinSound());
Intent recentAppIntent = new Intent(GcmIntentService.this, Win.class);
recentAppIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
contentIntent = PendingIntent.getActivity(getBaseContext(), 1, recentAppIntent, 0);
}
感谢在 avenced