java - 没有 Wifi 无法定位

标签 java android geolocation location google-maps-android-api-2

我有一个使用 LocationClient 的简单应用程序。位置会更新,直到启用 wifi。

案例:

1. 3G on, wifi on (connected or not), GPS on- work
2. 3G on, wifi on (connected or not), GPS off- work
3. 3G off, wifi on (connected or not), GPS off- work
4. 3G on/off, wifi off, GPS on/off- doesn't work 

代码:

public class PlayPositionProvider implements PositionProvider, FastestUpdate, GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener {

    private static final String LOG_TAG = "PLAY_POSITION_PROVIDER";
    private long period, fastest;
    private LocationClient client;
    private final Context context;
    private final PositionListener positionListener;
    private LocationListener listener = new LocationListener() {

        @Override
        public void onLocationChanged(Location location) {

            Log.v(LOG_TAG, "LOCATION UPDATE");

            positionListener.onPositionUpdate(location);
        }
    };

    public PlayPositionProvider(Context context, long period, long fastest, PositionListener positionListener) {
        this.context = context;
        this.positionListener = positionListener;
        this.period = period;
        this.fastest = fastest;
    }

    @Override
    public void setUpdateInterval(long interval) {

        request.setInterval(interval);
        this.period = interval;
    }

    @Override
    public void setFastestInterval(long fastestInterval) {

        request.setFastestInterval(fastestInterval);
        this.fastest = fastestInterval;
    }

    private final LocationRequest request = LocationRequest.create();

    @Override
    public void onConnected(Bundle bundle) {

        Log.v(LOG_TAG, "onConnected()");

        request.setInterval(period);
        request.setFastestInterval(fastest);

        request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

        client.requestLocationUpdates(request, listener);
    }

    @Override
    public void onDisconnected() {
        Log.v(LOG_TAG, "onDisconnected()");
        client.removeLocationUpdates(listener);
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.v(LOG_TAG, "NOT IMPLEMENTED onConnectionFailed()");

    }

    @Override
    public void startUpdates() {

        client = new LocationClient(context, this, this);
        client.connect();
    }

    @Override
    public void stopUpdates() {

        client.disconnect();

    }
}

AndroidManifest.xml 中我有以下权限:

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="17"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.VIBRATE"/>

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<permission android:name="org.[PACKAGE_NAME].permission.C2D_MESSAGE"
            android:protectionLevel="signature"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

<!--Only in debug purpose-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>

<permission android:name="org.[PACKAGE_NAME].permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="org.[PACKAGE_NAME].permission.C2D_MESSAGE"/>

最佳答案

两件事:

  1. 我们不知道您是否正在检查 GooglePlayServices 是否可用..
  2. 使用 requestLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 你是在说你对 GPS 数据感兴趣。我不确定,但这可能是问题所在

关于java - 没有 Wifi 无法定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18719669/

相关文章:

java - 在Java中,以下语句等同于什么?

java - 在java中制作一个可播放的jslider

android - 找不到 Mockito 和 JUnit

php - Elasticsearch地理位置搜索未返回英里单位的结果

image - 我应该添加每个图像的位置以便在搜索引擎上获得更好的地理位置吗?

java - android 中的适配器使用相同的重写方法

java - 通过 JJWT 解密 JSON 字符串并删除引号 -Java

java - 在android中的按钮上绘制不同的颜色

android - fragmentTransaction.hide 和 setVisibility(GONE) 之间的区别;

c# - Microsoft Bot Framework 地理定位