Androidでゲームをやっています。私はgcmプッシュ通知を使用していますが、基本的にプッシュで行っていることは、プッシュに勝者または敗者の値があるかどうか、勝者の値があり、ユーザーが「結果を待っている」画面にいるかどうかを確認することです。アプリは他のアクティビティ画面に移動します (プッシュ値に応じて待機画面または敗者画面)。したがって、スキーマは次のとおりです。
ユーザーが待機画面でプッシュが来ると、プッシュ画面の値に移動します。
Android 4.2.xではすべて完全に動作しますが、4.1.xおよび最も古いバージョン(私がサポートする最後のバージョンは2.3.6です)では、プッシュが来てデバイスがスリープモードになっていると機能しません。この場合( api<16 、プッシュが来るデバイスがスリープモードになっている場合) アプリがオフになり、エラーがオフになるだけでなく、もう一度開始する必要があります。この問題を解決するために、私は次の行を書き、アプリが機能するように強制しましたが、問題は、画面が常にオンになり、スリープモードにならないことです。あなたがその瞬間に遊んでいない場合、バッテリーはすぐに死んでしまいます。新しい実装に関する私の問題のスキーマは次のとおりです。
Android バージョンが 4.1.x 未満で、画面がスリープ モードの場合。プッシュが来て、画面がオン(常に)ユーザーの画面ロック解除を待っています。
私の質問は次のとおりです。API <16でアプリがオフになる理由について何か考えはありますか? 別の実装のアイデアはありますか?
GcmIntentService 内のこの関数は IntentService クラスを拡張し、プッシュ通知に win 値がある場合に実行されます
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);
}
ありがとうございます