我想每24小时向我的服务器发送一下我走了几步.我有一个AlarmManager即可关闭alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),1000*60*60*24, pendingIntent1)
现在这就是我被困住的地方......我应该如何衡量每日步骤?(记住我需要在后台发送这个)我可以使用这个可以覆盖此功能的服务,public void onSensorChanged(SensorEvent event)这似乎不太准确,因为我的服务可以被摧毁(电池会很快耗尽).
要么
我可以尝试使用Google Fitness,但每次尝试获取数据时mGoogleApiClient.connect()我都需要用户请求连接(我需要在后台获取此数据)
有没有经验呢?
我有一个 Android 服务(Servcie 接口的实现),与我的真实应用程序相比,它在单独的进程上运行。不幸的是,当我离开我的真实应用程序(在其中我单击按钮启动我的服务)并从任务管理器中将其刷出时,我的服务也被杀死了。
我知道这里有很多这样的问题,但不知何故,没有人在我的具体星座中针对这个问题,或者他们的回答含糊不清。
所以在我的清单中,我有类似的东西:
<application ...>
<activity .../>
<service Android:name="MyService"
Android:label="MyLabel"
Android:export="false"
Android:process=":MyRemoteProcessName" />
</application>
Run Code Online (Sandbox Code Playgroud)
我首先使用了一个 IntentService,但也切换到了自己的服务接口实现(消除了 IntentService 成为故障点),它看起来像:
public class MyService extends Service {
private ScheduledExecutorService scheduledWorker = Executors.newSingleThreadScheduledExecutor();
@Override
public void onStart() {
// Init components
startForeground(this, MyNotification);
}
@Override
public int onStartCommand(Intent i, int startId) {
// Execute Work on Threadpool here
scheduledWorker.execute(new ScheduledStopRequest(this, startId), 5, TimeUnit.Minutes);
return START_REDILIVER_INTENT;
}
// Overwritten onDestroy-Method
@Override
public void onLowMemory() {
Log.e(LOG_TAG, "On Low Memory called!");
}
@Override …Run Code Online (Sandbox Code Playgroud) android long-running-processes android-service foreground-service
美好的一天。我的情况很糟糕。我正在会话中创建一个位置共享逻辑。我将该会话保留在 mysql 的服务器上。当 android 命中该活动时,我会相应地插入用户信息。当 android 离开活动时,我当然会删除该活动列,因此会话被放弃到另一侧。一切都很好,直到出现一个问题。Android 不为从最近刷卡的应用程序提供回调,这意味着应用程序已被完全杀死。我在那里找到了一个工作。我正在使用一项服务和一旦达到我想要的活动就开始服务。在服务中,我有一个简单的东西叫做 onTaskRemoved() 它会在应用程序通过从最近的滑动中被杀死时通知我。一切都很好,直到我想调用我的服务器为了删除列。电话不会随便打通,我永远不会在那里收到任何响应,但在 onDestroy() 中一切都按预期工作。实际上这里是代码
@Override
public void onTaskRemoved(Intent rootIntent) {
destroySession();
super.onTaskRemoved(rootIntent);
}
private void destroySession() {
Log.d("Fsafasfsafasfas", "destroySession: " + opponentId + " my user id" + sharedHelper.getUserId());
Call<ResponseBody> locationCall = Retrofit.getInstance().getInkService().requestFriendLocation(sharedHelper.getUserId(), opponentId, "", "", Constants.LOCATION_REQUEST_TYPE_DELETE);
locationCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response == null) {
destroySession();
return;
}
if (response.body() == null) {
destroySession();
return;
}
try {
String responseBody = response.body().string();
Log.d("Fsafasfsafasfas", "onResponse: …Run Code Online (Sandbox Code Playgroud)