Android中的Gps位置记录服务

时间:2015-10-11 15:54:22

标签: android gps broadcastreceiver android-service

我正在创建一个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);
   }
}

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

Manifest

1 个答案:

答案 0 :(得分:0)

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

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

android:exported="true"

来自<receiver>

的清单声明