我正在创建一个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);
}
}
但是服务开始,但它说“不幸的是应用程序停止工作”,这意味着广播已收到,但存在一些问题。 我的清单文件如下:
答案 0 :(得分:0)
如果您想每小时获取用户的位置,则需要使用其中一种位置监听器机制(原生Android位置API或Google位置服务API)。然后,您可以每小时向位置管理员注册位置回调。在这种情况下,您应该将PendingIntent
传递给位置管理员,以便每小时启动Service
或使用GPS位置数据每小时触发一次BroadcastReceiver
。
此外,Android无法在设备启动时启动BroadcastReceiver
。要解决此问题,请删除
android:exported="true"
来自<receiver>