2015-02-13 41 views
12

Vì vậy, tôi đã triển khai API Nhà cung cấp Vị trí Hợp nhất mới để có được vị trí của người dùng. Không phải lúc nào, người dùng sẽ có GPS của họ và tôi không muốn yêu cầu họ bật GPS mỗi lần tải ứng dụng. Làm cách nào tôi có thể yêu cầu API cung cấp cho tôi vị trí với bất kỳ nhà cung cấp nào có sẵn?Nhà cung cấp Vị trí hợp nhất không nhận được vị trí trừ khi GPS đang ở trên

Đây là mã của tôi:

public class FusedLocationService implements 
     LocationListener, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    public interface OnLocationChangedListener { 
     public void OnLocationChanged(Location location); 
    } 

    private final String TAG = "SE8611"; 
    private boolean mRequestingLocationUpdates = true; 

    private OnLocationChangedListener mCallBack; 

    Service locationService; 
    private LocationRequest locationRequest; 
    private GoogleApiClient googleApiClient; 
    private Location mCurrentLocation; 
    private FusedLocationProviderApi fusedLocationProviderApi = LocationServices.FusedLocationApi; 

    public FusedLocationService(Service locationService, final long INTERVAL, final long FASTEST_INTERVAL) { 
     Logger.log(TAG, "FusedLocationService called"); 

     this.mCallBack = (OnLocationChangedListener)locationService; 

     locationRequest = LocationRequest.create(); 
     locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     locationRequest.setInterval(INTERVAL); 
     locationRequest.setFastestInterval(FASTEST_INTERVAL); 
     this.locationService = locationService; 

     googleApiClient = new GoogleApiClient.Builder(locationService) 
       .addApi(LocationServices.API) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 

     if (googleApiClient != null) { 
      googleApiClient.connect(); 
     } 
    } 

    @Override 
    public void onConnected(Bundle connectionHint) { 
     if(mRequestingLocationUpdates) { 
      startLocationUpdates(); 
     }else{ 
      Logger.log(TAG, "Location updates are already running."); 
     } 
    } 

    protected void startLocationUpdates() { 
     this.fusedLocationProviderApi.requestLocationUpdates(
       googleApiClient, locationRequest, this); 
     this.mRequestingLocationUpdates = false; 
    } 

    @Override 
    public void onLocationChanged(Location mCurrentLocation) { 
     Logger.log(TAG, "onLocationChanged called"); 
     this.mCurrentLocation = mCurrentLocation; 
     this.mCallBack.OnLocationChanged(this.mCurrentLocation); 
    } 

    public void startLocationUpdatesAfterResume(){ 
     if (googleApiClient.isConnected() && !mRequestingLocationUpdates) { 
      Logger.log(TAG, "startLocationUpdatesAfterResume called"); 
      this.startLocationUpdates(); 
     } 
    } 

    public void stopLocationUpdates() { 
     Logger.log(TAG, "stopping Location Updates"); 
     LocationServices.FusedLocationApi.removeLocationUpdates(
       googleApiClient, this); 
    } 

    public Location getLocation() { 
     return this.mCurrentLocation; 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     this.mRequestingLocationUpdates = true; 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     this.mRequestingLocationUpdates = true; 
    } 
} 
+1

tôi m cũng gặp vấn đề này, bạn đã giải quyết vấn đề này chưa? – jzarsuelo

+0

điều tương tự đã xảy ra trên máy tính bảng Nexus 7 của tôi, vui lòng chia sẻ giải pháp nếu nó được giải quyết, cảm ơn –

+0

Có cùng một vấn đề, không có vị trí nào trừ khi GPS được bật. Bạn đã giải quyết được vấn đề của mình chưa? – AAverin

Trả lời

0

bạn đang sử dụng LocationRequest.PRIORITY_HIGH_ACCURACY, mà thích sử dụng GPS trên và qua các phương pháp khác. Bạn có thể muốn sử dụng PRIORITY_BALANCED_POWER_ACCURACY, sẽ sử dụng Wi-Fi và tháp di động trước khi sử dụng GPS.

Ngoài ra, vì PRIORITY_BALANCED_POWER_ACCURACY là mức độ chính xác "thô", bạn có thể muốn thay đổi quyền vị trí trong tệp kê khai của mình một cách thích hợp.

The training documentation chi tiết thêm thông tin về các cờ ưu tiên, bạn cũng có thể muốn xem qua nó.

+1

Tôi chắc chắn đã thử điều đó. Tuy nhiên, tôi không nhận được bất kỳ vị trí nào khi tôi sử dụng PRIORITY_BALANCED_POWER_ACCURACY. –

+0

Bạn có đang thử nghiệm trên trình mô phỏng hoặc thiết bị không? – Abhishek

+0

Tôi đang thử nghiệm trên thiết bị. Để làm rõ, tôi không nhận được bất kỳ vị trí nào nếu tôi không có GPS. –

2

Tôi nghĩ rằng tôi đã tìm ra giải pháp cho vấn đề.

Nếu bạn vào Cài đặt -> Bảo mật và an toàn -> Vị trí, bạn sẽ nhận thấy rằng Vị trí không chỉ là GPS mà còn cho phép người dùng quyết định nhà cung cấp nào có thể được sử dụng. Ví dụ: bạn có thể đặt chỉ sử dụng WiFi và Cellular để có được bất kỳ vị trí nào

Tùy chọn Tắt vị trí sẽ tắt tất cả các nhà cung cấp cùng một lúc, không chỉ GPS.

Để kiểm tra ứng dụng đó cho người dùng chỉ có WiFi có thể nhận vị trí - thay đổi cài đặt thành "Wifi + Cellular".

5

Tôi gặp vấn đề tương tự như bạn, đây không phải là vấn đề. Android đã từng sử dụng nút GPS cho phép bạn điều khiển trực tiếp, nhưng họ đã thay thế bằng nút Vị trí hoạt động khác. Để nhận bất kỳ loại vị trí nào, bạn phải bật tính năng này. Giống như bạn, tôi nghĩ nút Vị trí chỉ bật và tắt GPS, nhưng không phải như vậy. Bạn có thể kiểm soát GPS bằng cách thay đổi chế độ vị trí: 1. Độ chính xác cao (GPS, Wi-Fi và mạng di động) 2. Tiết kiệm điện (Wi-Fi và mạng di động) 3. GPS chỉ

+0

Tôi nghĩ câu trả lời này giải quyết được sự nhầm lẫn giữa vị trí và GPS. –

Các vấn đề liên quan