2015-03-19 113 views
0

我有一款游戏,并且我希望每隔几小时发送一次通知,以关闭该应用程序而不打开它。为了使这些通知不是问题,但我不知道如何计算应用程序未被使用的时间?我应该保存在本地文件,如应用程序偏好类吗?还是有不同的方式?关闭应用程序的时间

例如:我玩游戏,然后关闭它。我没有触及游戏一天,然后我收到通知“回来等等等等,玩等等等等”

+0

偏好会在这里我的第一选择,简单而有效。 – 2015-03-19 11:13:25

+0

你是否从服务器获取了关于应用程序是否连接的控制权? – eduyayo 2015-03-19 11:13:45

+0

请参阅此问题http://stackoverflow.com/questions/2166961/determining-the-current-foreground-application-from-a-background-task-or-service/5528441#5528441 – Signare 2015-03-19 11:16:53

回答

0

使用AlarmManager来设置当你退出你的应用程序,你会收到你的接收器类的报警下面的代码

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

       PendingIntent pendingIntent = PendingIntent.getBroadcast(context, ALARM_ID_XYZ, new Intent(
         FILTER_TIME_ABC), PendingIntent.FLAG_UPDATE_CURRENT); 

       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1*60*60*1000, 1*60*60*1000, pendingIntent); 

并在您的应用程序开始取消使用下面的代码的所有报警:

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

       PendingIntent pendingIntent = PendingIntent.getBroadcast(context, ALARM_ID_XYZ, new Intent(
         FILTER_TIME_ABC), PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(pendingIntent); 
+0

如果有人正在使用一直运行的服务,则无需使用Alarmmanager。处理程序更容易。 – Fasiha 2015-03-19 11:31:19

+0

@MahaKhan服务可能会死亡......最好使用AlarmManager。 – 2015-03-19 12:41:36

0

如果您使用的始终运行有没有必要使用Alarmmanager的服务。处理程序更容易。 使用共享首选项和一些类似的计算。

// Calendar.getInstance().getTime() This is previous time 

       Date prevTime = Calendar.getInstance().getTime(); 
       Date currentTime = null; 
       SimpleDateFormat formatter = new SimpleDateFormat(
         "EEE MMM dd HH:mm:ss zzzz yyyy"); 
       currentTime = formatter.parse(get value from share preference); 

       if (((prevTime.getTime() - currentTime.getTime()) 
         /(60 * 1000) % 60) < 30) 
        { 
    //Call Your function 

     } 

希望这将帮助你

+0

太好了!但是,如何在有人关闭应用程序时获得时间? – user4689356 2015-03-19 12:49:56

+0

停止监听器?或在后面按? – Fasiha 2015-03-19 13:36:29