android 获取实时定位并传给后台,Android:定期(每30秒)在后台发送位置数据,并向服务器询问新数据...
场景:发布到服务器以在30秒内每隔30秒在后台获取任何新数据,即12小时.位置数据需要与此一起发送.目前的实施;服务类;>位置监听器,间隔为30秒,设置经度和纬度值为两个局部变量>警报管理器每隔30秒向广播接收器发出等待意图.>广播接收器在附加内容中启动带有位置变量的IntentService.> IntentService http发布位置并要求来自服务器的任何新数据.&
场景:
发布到服务器以在30秒内每隔30秒在后台获取任何新数据,即12小时.位置数据需要与此一起发送.
目前的实施;
服务类;
>位置监听器,间隔为30秒,设置经度和纬度值为两个局部变量
>警报管理器每隔30秒向广播接收器发出等待意图.
>广播接收器在附加内容中启动带有位置变量的IntentService.
> IntentService http发布位置并要求来自服务器的任何新数据.
> IntentService通过广播接收器将服务器响应发送回主服务类.
>服务类starts_sticky以确保操作系统重新启动.
我尝试过几种不同的变化;
>我尝试使用Handler和runnable来处理发布到服务器的计时机制,但是当设备处于睡眠状态时,postDelay时间从2分钟变为7分钟.
>此外,尝试直接从警报管理器触发IntentService,但无法使用最新的位置变量更改PendingIntent附加功能.
问题;
>目前的实施方式是否可行?
>谷歌的GCM路线会更有利吗?
>你如何大力测试服务类,特别是从操作系统中恢复杀死它?
提前致谢.
解决方法:
我设法使用AlarmManager和WakeLock在后台每2分钟运行一次我的服务,如this answer所述.即使设备处于休眠状态,它每2分钟运行一次.只需将闹钟设置为重复即可
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, 60000 * ALARM_PERIOD_IN_MINUTES, alarmPendingIntent);
而不是将其设置为时间.
标签:android,background,service,alarmmanager,locationmanager
来源: https://codeday.me/bug/20190709/1410390.html
更多推荐
所有评论(0)