3

我有一个简单的应用程序,它使用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"/>
4

1 回答 1

0

两件事情:

  1. 我们不知道您是否正在检查 GooglePlayServices 是否可用..
  2. 你说你对requestLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);GPS 数据感兴趣。我不确定,但这可能是问题所在
于 2013-09-11T07:36:18.563 回答