gpt4 book ai didi

在我重新激活 WiFi/移动网络之前,服务中的 Android 位置监听器无法工作

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:09 25 4
gpt4 key购买 nike

我的位置监听器工作正常,可以毫无问题地收集数据。但有时它不收集任何数据。此时我必须关闭并重新启动我的位置提供程序。重新启动可以解决问题,但是,这可能不是用户期望做的最好的事情。

当我使用 GPS 作为提供者时,没有问题。

位置监听器在服务中工作。我不明白这个问题。是关于 Android 还是我的代码?

提前致谢。

最佳答案

您可以使用新的位置提供程序 (FusedLocationProvider),它结合了来自不同位置提供程序的信息,因此如果您的设备有任何可能获取位置,您就会知道它。当然,您应该在您的设备的首选项中启用应用程序使用位置信息。

查看 developers.android.com 以获取有关此提供程序的更多信息。

这是适合我的解决方案:

public class FusedLocationListener implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener  {

public interface LocationListener {
public void onReceiveLocation(Location location);
}

private LocationListener mListener;

public static final String TAG = "Fused";
private LocationClient locationClient;
private LocationRequest locationRequest;


protected int minDistanceToUpdate = 1000;
protected int minTimeToUpdate = 10*1000;

protected Context mContext;


@Override
public void onConnected(Bundle bundle) {
Log.d(TAG, "Connected");
locationRequest = new LocationRequest();
locationRequest.setSmallestDisplacement(1);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30000);
locationRequest.setNumUpdates(1);
locationClient.requestLocationUpdates(locationRequest, this);

}

@Override
public void onDisconnected() {
Log.d(TAG, "Disconnected");
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "Failed");
}


private static FusedLocationListener instance;

public static synchronized FusedLocationListener getInstance(Context context, LocationListener listener){
if (null==instance) {
instance = new FusedLocationListener(context, listener);
}
return instance;
}


private FusedLocationListener(Context context, LocationListener listener){
mContext = context;
mListener = listener;
}


public void start(){

Log.d(TAG, "Listener started");
locationClient = new LocationClient(mContext,this,this);
locationClient.connect();

}


@Override
public void onLocationChanged(Location location) {
Log.d(TAG, "Location received: " + location.getLatitude() + ";" + location.getLongitude());
//notify listener with new location
mListener.onReceiveLocation(location);
}


public void stop() {
locationClient.removeLocationUpdates(this);
}
}

用法:

public class MyActivity extends Activity implements FusedLocationListener.LocationListener {

@Override
public void onCreate(Bundle savedInstanceState) {

FusedLocationListener locationListener FusedLocationListener.getInstance(getApplicationContext(), this);

locationListener.start();
}

@Override
public void onReceiveLocation(Location location) {
//handle location here
}

}

关于在我重新激活 WiFi/移动网络之前,服务中的 Android 位置监听器无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17169143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com