【问题标题】:Gps Location Logging through Service in Android通过 Android 中的服务进行 Gps 位置记录
【发布时间】:2024-01-04 18:42:01
【问题描述】:

我正在制作一个 android 应用程序,每隔几个小时将当前用户位置记录到我的服务器。到目前为止,我已经做了一个课程来给我当前的用户位置,并且我还能够将位置数据发送到网络。我还能够在我的应用程序中注册服务以运行,即使我的应用程序已从后台清除。现在我想整合所有这些,但似乎无法整合。

我的主要活动是

public class MainPage extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mainpage);

    Intent i= new Intent(MainPage.this, RunnerService.class);
    this.startService(i);
}
}

我的服务是:

public class RunnerService extends Service {


@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    Log.d("SahiyogiHaat", "Service created");

}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    Log.d("SahiyogiHaat", "Service started");
      return Service.START_STICKY;

}
@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
}

那么我应该在哪里创建我的位置跟踪器类的对象来运行服务并每 1 小时访问一次用户位置。除此之外,我尝试如下实现重启广播接收器,并在用户打开手机时从那里实现服务:

public class MyReceiver  extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Intent i= new Intent(context, RunnerService.class);
    // potentially add data to the intent
    context.startService(i);
   }
}

但服务没有启动,但它说“不幸的是应用程序停止工作”,这意味着广播已经收到但有一些问题。 我的清单文件如下:

【问题讨论】:

  • 重启后我无法捕捉到异常
  • 异常会一直记录在logcat中。应用程序崩溃后的任何时候,只需将您的设备连接到您的机器并运行adb logcat - 它会显示自设备启动以来的所有事件并包括崩溃的堆栈跟踪。

标签: android gps broadcastreceiver android-service


【解决方案1】:

如果您想每小时获取用户的位置,您需要使用其中一种位置侦听器机制(原生 Android 位置 API 或 Google 位置服务 API)。然后,您可以每小时向位置管理器注册一次位置回调。在这种情况下,您应该将 PendingIntent 传递给位置管理器,以便它每小时启动您的 Service 或使用 GPS 位置数据触发 BroadcastReceiver

此外,Android 无法在设备启动时启动您的BroadcastReceiver。要解决此问题,请移除

android:exported="true"

来自<receiver> 的清单声明

【讨论】:

    最近更新 更多