Android中的Gps定位登录服务

Android中的Gps定位登录服务,android,gps,broadcastreceiver,android-service,Android,Gps,Broadcastreceiver,Android Service,我正在制作一个android应用程序,每隔几个小时将当前用户位置记录到我的服务器上。到目前为止,我已经制作了一个类来给我当前的用户位置,并且我还能够将位置数据发送到web。我还可以在我的应用程序中注册一项服务来运行,即使我的应用程序已从后台清除。现在我想整合所有这些,但似乎无法整合 我的主要活动是 public class MainPage extends Activity { @Override protected void onCreate(Bundle savedInstanceState

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

我的主要活动是

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;
}
}
所以,我应该在哪里设置location tracker类的对象,以便每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);
   }
}
但服务并没有启动,但它表示不幸的是应用程序停止工作,这意味着广播已经收到,但存在一些问题。 我的清单文件如下:


如果您希望每小时获取用户的位置,则需要使用其中一种位置侦听器机制,即本机Android位置API或Google位置服务API。然后,您可以每小时向位置管理器注册一次位置回调。在这种情况下,您应该将PendingEvent传递给location manager,以便它每小时启动一次服务,或者每小时使用GPS位置数据触发一个广播接收器

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

android:exported="true"

从重新启动后的

清单声明中,我无法捕获异常该异常将始终记录在logcat中。在应用程序崩溃后的任何时候,只需将设备连接到计算机并运行adb logcat-它将显示设备启动后的所有事件,并包括崩溃的堆栈跟踪。