2015-03-10 15 views
15

Tôi đang cố gắng làm theo hướng dẫn của Android Receiving Location Updates. Mã ví dụ là here on Github.Android không thể giải quyết phương thức requestLocationUpdates FusedLocationProviderAPI

Tất cả mọi thứ đang làm việc ngoại trừ dòng này: LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

Nó ném một lỗi cannot resolve method requestLocationUpdates. Tôi không thấy bất cứ điều gì trong documentation, nhưng tôi khá mới với Android nên có thể thiếu một cái gì đó :).

Đây là mã đầy đủ. Bất kỳ ý tưởng mà tôi đang đi sai? Cảm ơn!

package location.test.example.com; 

import android.app.Fragment; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.os.Bundle; 
import android.support.v4.app.NavUtils; 
import android.text.format.DateFormat; 
import android.util.Log; 
import android.view.ActionMode; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 

import java.util.ArrayList; 
import java.util.Date; 

public class LocationFragment extends Fragment implements 
     GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { 

    protected GoogleApiClient mGoogleApiClient; 
    protected Location mCurrentLocation; 
    protected LocationRequest mLocationRequest; 
    protected String mLastUpdateTime; 

    public static final long UPDATE_INTERVAL_IN_MILLISECONDS = 5000; 

    public static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS = UPDATE_INTERVAL_IN_MILLISECONDS/5; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mLastUpdateTime = ""; 

     buildGoogleApiClient(); 

     if (NavUtils.getParentActivityName(getActivity()) != null) { 
      getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); 
     } 
     setHasOptionsMenu(true); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_location, container, false);  

     return v; 
    } 

    protected synchronized void buildGoogleApiClient() { 
     mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
       .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); 
     startLocationUpdates(); 
    } 

    protected void startLocationUpdates() { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
    } 

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

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 
     mCurrentLocation = location; 
     mLastUpdateTime = DateFormat.getDateFormat(getActivity()).format(new Date()); 
     Toast.makeText(getActivity(), location.toString() + "", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onConnected(Bundle connectionHint) { 

    } 

    @Override 
    public void onConnectionFailed(ConnectionResult result) { 
     Log.i("LocationFragment", "Connection failed: ConnectionResult.getErrorCode() " + result.getErrorCode()); 
    } 

    @Override 
    public void onConnectionSuspended(int cause) { 
     Log.i("LocationFragment", "Connection suspended"); 
     mGoogleApiClient.connect(); 
    } 

} 

Trả lời

65

Bạn phải sử dụng LocationListener cho LocationServices.FusedLocationApi.requestLocationUpdates's locationListener

không

android.location.LocationListener

nhưng

com.google.android.gms.location.LocationListener

+2

nên đã nhận thấy một điều đó! Nice tìm thấy –

+0

Đẹp nhất. LocationListener của vấn đề này nên được thay đổi. http://stackoverflow.com/questions/34582370/how-can-i-use-google-maps-and-locationmanager-to-show-current-location-on-androi – RoCk

+0

Người đàn ông, bạn thật tuyệt vời. Cảm ơn –

0

Nhập android.location.LocationListener hoặc com.google.android.gms.location.LocationListener là vô dụng như các gói còn lại không sử dụng. Triển khai com.google.android.gms.location.LocationListener inteface sẽ thực hiện.

6

nhập

import com.google.android.gms.location.LocationListener; 

thay vì

import android.location.LocationListener; 
0

Thay vì thay đổi câu lệnh import, Sử dụng thực hiện com.google.android.gms.location.LocationListener

hơn chỉ LocationListener/android.location.LocationListener.

Nó chắc chắn đã giải quyết được vấn đề của tôi.

+0

Vui lòng giải thích câu trả lời của bạn. Cách triển khai giao diện này sẽ khắc phục lỗi? –

0

cần cập nhật phiên bản của google play dịch vụ 10.0.0+

compile 'com.google.android.gms:play-services:10.0.0' 
Các vấn đề liên quan