Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onLocationChanged是否仍会被调用,即使它不在服务中';什么时候开始?_Java_Android_Locationlistener - Fatal编程技术网

Java onLocationChanged是否仍会被调用,即使它不在服务中';什么时候开始?

Java onLocationChanged是否仍会被调用,即使它不在服务中';什么时候开始?,java,android,locationlistener,Java,Android,Locationlistener,我有一项服务,需要在用户移动时获取其位置。我还不知道如何将onLocationChanged放在启动的内部,所以我只是将它放在外部。当用户移动时,它还会被调用吗?如果没有,我将如何在onStart中调用它 public class myService extends Service implements LocationListener { Double lat; Double lng; @Override public IBinder onBind(Intent arg0) { return

我有一项服务,需要在用户移动时获取其位置。我还不知道如何将onLocationChanged放在启动的内部,所以我只是将它放在外部。当用户移动时,它还会被调用吗?如果没有,我将如何在onStart中调用它

public class myService extends Service implements LocationListener {
Double lat;
Double lng;

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Let it continue running until it is stopped.
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();





return START_STICKY;

}

@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}



@Override
public void onLocationChanged(Location location) {

if (MainActivity.location != null) {


   lat = MainActivity.location.getLatitude();

    lng = MainActivity.location.getLongitude();


    if (MainActivity.placeArrayList.size() != 0) {
        for (int i = 0; i < MainActivity.placeArrayList.size(); i++) {


            Log.e("hello", String.valueOf(Float.parseFloat(MainActivity.latitudeArrayList.get(i))));

            MainActivity.destination.setLatitude(Double.parseDouble(MainActivity.latitudeArrayList.get(i)));
            MainActivity.destination.setLongitude(Double.parseDouble(MainActivity.longitudeArrayList.get(i)));
            Log.e("distancemeters", String.valueOf(MainActivity.location.distanceTo(MainActivity.destination)));

            if (MainActivity.location.distanceTo(MainActivity.destination)<100) {




                AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

                audioManager.setStreamVolume(AudioManager.STREAM_RING, AudioManager.RINGER_MODE_SILENT, AudioManager.FLAG_SHOW_UI);


            } else {



            }

        }


    }
}

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}
}
公共类myService扩展服务实现LocationListener{
双lat;
双液化天然气;
@凌驾
公共IBinder onBind(意图arg0){
返回null;
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
//让它继续运行直到停止。
Toast.makeText(此“服务已启动”,Toast.LENGTH_LONG).show();
返回开始时间;
}
@凌驾
公共空间{
super.ondestory();
Toast.makeText(此“服务已销毁”,Toast.LENGTH_LONG).show();
}
@凌驾
已更改位置上的公共无效(位置){
if(MainActivity.location!=null){
lat=MainActivity.location.getLatitude();
lng=MainActivity.location.getLongitude();
if(MainActivity.placeArrayList.size()!=0){
对于(int i=0;i如果(MainActivity.location.distanceTo(MainActivity.destination)假设您正在使用谷歌的,您需要先做几件事:

  • 更改类以实现
    GoogleAppClient.ConnectionCallbacks
    GoogleAppClient.OnConnectionFailedListener
  • 创建您的GoogleApi对象
  • 创建LocationRequest对象
  • 将类注册为LocationListener
  • 首先,按如下方式更改类定义:

    public class myService extends Service implements LocationListener,      
                                                      GoogleApiClient.ConnectionCallbacks, 
                                                      GoogleApiClient.OnConnectionFailedListener {
    
    然后将其放入您的
    onStart()
    方法中:

    // 2. Create the GoogleApi object
    GoogleApi = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    
    // 3. Create the LocationRequest
    mLocationRequest.setInterval(1000); // in milliseconds
    mLocationRequest.setFastestInterval(1000); // in milliseconds
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    
    // 4. Register your listener
    LocationServices.FusedLocationApi.requestLocationUpdates(GoogleApi, mLocationRequest, this)
    
    如果要注销侦听器,请将其放入
    onDestroy()


    但是,请记住,使用此方法意味着您将在指定的时间间隔获得位置更新,而不是在用户移动时获得位置更新。您需要找到跟踪用户位置的方法,并确定构成“移动”的最小距离此外,您还需要考虑位置可能围绕用户的位置跳舞,因此您也必须考虑到这一点。

    不可识别的一件小事,Mauncist.GETAppCutExter()。它不知道什么GETAppCutExter()。isSorry-我从我的一个项目中提取了代码。您只需传入对您的服务的引用,即
    。编辑我的答案以反映这一点。
    LocationServices.FusedLocationApi.removeLocationUpdates(GoogleApi, this);