相关疑难解决方法(0)

获取用户在后台发送到服务器的每日步数的最佳方法

我想每24小时向我的服务器发送一下我走了几步.我有一个AlarmManager即可关闭alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),1000*60*60*24, pendingIntent1)

现在这就是我被困住的地方......我应该如何衡量每日步骤?(记住我需要在后台发送这个)我可以使用这个可以覆盖此功能的服务,public void onSensorChanged(SensorEvent event)这似乎不太准确,因为我的服务可以被摧毁(电池会很快耗尽).

要么

我可以尝试使用Google Fitness,但每次尝试获取数据时mGoogleApiClient.connect()我都需要用户请求连接(我需要在后台获取此数据)

有没有经验呢?

android android-sensors google-fit

7
推荐指数
1
解决办法
1212
查看次数

当我刷出我的应用程序(在其他进程中运行)时,运行在单独进程上的 Android 服务被杀死

我有一个 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

5
推荐指数
1
解决办法
2087
查看次数

Android onTaskRemoved() 调用 webservice

美好的一天。我的情况很糟糕。我正在会话中创建一个位置共享逻辑。我将该会话保留在 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)

service android kill-process

3
推荐指数
1
解决办法
1203
查看次数