【问题标题】:on locaton changed never gets called in android google client api在 android google 客户端 api 中永远不会调用位置更改
【发布时间】:2015-02-02 14:55:10
【问题描述】:

我正在开发需要位置服务的应用程序,我的代码如下。 主要问题是位置改变永远不会被调用

public class MainActivity extends ActionBarActivity implements
    ConnectionCallbacks, OnConnectionFailedListener, LocationListener {
protected GoogleApiClient mGoogleApiClient;
public static final long UPDATE_INTERVAL_IN_MILLISECONDS = 100;
public static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS =
        UPDATE_INTERVAL_IN_MILLISECONDS / 2;
protected LocationRequest mLocationRequest;
protected static final String TAG = "location-updates-sample";
protected Location mCurrentLocation;

Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    btn=(Button)findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i(TAG,"btn is clicked");
            buildGoogleApiClient();
            Log.i(TAG,"build google api completed");
            mGoogleApiClient.connect();
            Log.i(TAG,"client conneted");

        }
    });
}

protected synchronized void buildGoogleApiClient() {
    Log.i(TAG, "Building GoogleApiClient");
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    createLocationRequest();
}
protected void createLocationRequest() {
    mLocationRequest = new LocationRequest();
 mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
 mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
protected void startLocationUpdates() {
 LocationServices.FusedLocationApi.requestLocationUpdates(
     mGoogleApiClient, mLocationRequest, this);
}
@Override
public void onConnected(Bundle bundle) {
    startLocationUpdates();
    Log.i(TAG,"from onconnected method");
}

@Override
public void onConnectionSuspended(int i) {
    mGoogleApiClient.connect();

}

@Override
public void onLocationChanged(Location location) {
    mCurrentLocation = location;
    Log.i(TAG,"on location changed");
    Log.i(TAG,String.valueOf(mCurrentLocation.getLongitude()));
    Log.i(TAG,String.valueOf(mCurrentLocation.getLatitude()));
    Toast.makeText(this,"liocation changed", Toast.LENGTH_SHORT).show();

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}

}

我已经在清单中完成了“ACCESS_FINE_LOCATION”。还将设置设置为仅“gps”设备。 当我点击按钮时,我得到了结果

location-updates-sample﹕ btn is clicked
location-updates-sample﹕ Building GoogleApiClient
location-updates-sample﹕ build google api completed
location-updates-sample﹕ client conneted
location-updates-sample﹕ from onconnected method

我的代码有什么问题

【问题讨论】:

    标签: android


    【解决方案1】:

    我使用相同的代码来处理位置。 不知道是否是正确的解决方案,但尝试替换

    mLocationRequest = new LocationRequest();
    

    mLocationRequest = LocationRequest.create();
    

    为我工作。

    【讨论】:

      【解决方案2】:

      我不懂英语。希望我能帮上忙:

      我认为您的 UPDATE_INTERVAL_IN_MILLISECONDS = 100( 0,1 s) 和 FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS ( 100/ 2 = 0.05s) 对于 gps 芯片来说非常快。你应该设置它 > 1s 。像这样的东西

      UPDATE_INTERVAL_IN_MILLISECONDS  =  10 * 1000;// 10s
      
      FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS  = 5 *1000; // 5s
      

      【讨论】:

      【解决方案3】:

      确保您已添加 .addApi(LocationServices.API)

      我没有在我的模拟器中调用 onLocationChanged(Location location)。

      current_location =LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
      

      使用它可以找到当前位置。

      希望这会对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-28
        • 2020-02-13
        相关资源
        最近更新 更多