我有一个用户在设备之间玩的游戏应用程序。我添加了一个服务,间歇性地检查远程玩家是否已经移动,然后通知本地用户它现在轮到他或她。我在游戏的主要活动中使用此代码根据用户对“间歇性”的偏好来启动服务
if (Settings.AlarmInterval != 0) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MINUTE, (int)( Settings.AlarmInterval/1000/60));
Intent myIntent = new Intent(mCtx, WakeCheck.class);
pendingIntent = PendingIntent.getService(mCtx, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)mCtx.getSystemService(mCtx.ALARM_SERVICE);
alarmManager.cancel(pendingIntent); // cancel any previous alarms
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), Settings.AlarmInterval, pendingIntent);
}
这很好用。但是,即使本地用户正在播放 服务唤醒的游戏并检查是否已经进行了一次移动。我想要 用户只有在当前没有玩游戏时才会收到通知。
如何在我的WakeCheck服务中检测到游戏正在运行并且无需检查远程游戏?
公共类WakeCheck扩展了服务{
private triDbAdapter mDbHelper;
private static final int CHALLENGE = -2;
@Override
public void onCreate() {
// TODO Auto-generated method stub
//Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
//Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
return null;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mDbHelper.close();
//Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Cursor c;
triDbAdapter mDbHelper = new triDbAdapter(this.getApplicationContext());
mDbHelper.open();
ServerCommunication sComm = new ServerCommunication(this.getApplicationContext());
c = mDbHelper.fetchAllGames();
Log.d("WAKE","Checking Game Status");
<snip>
}
答案 0 :(得分:0)
今年有人在Google I / O上提出了这个想法...当你的游戏活动进入前景时(例如onResume()),你将SharedPreferences中的布尔值设置为true表示用户正在播放。 WakeCheck将读取此值,如果为真,则无需检查远程播放。当游戏活动进入后台时(例如onPause()),它将值设置为false以与WakeCheck通信它需要检查远程播放。