2013-08-09 44 views
18

Tôi có một ứng dụng Android sử dụng vị trí. Nhưng tôi nhận thấy rằng nếu người dùng tắt tính năng 'Truy cập vào vị trí của tôi' trong Cài đặt> Truy cập vị trí, không có gì hoạt động nữa. Làm thế nào tôi có thể kiểm tra xem nó đã được kích hoạt chưa? Trong trường hợp bị tắt, cách mở các cài đặt đó từ ứng dụng của tôi?Kiểm tra xem 'Truy cập vào vị trí của tôi' đã được bật chưa - Android

Cảm ơn

SOLVED:

String locationProviders = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
if (locationProviders == null || locationProviders.equals("")) { 
    ... 
    startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
} 

Trả lời

3

có thể đây sẽ hữu ích kiểm tra trang web này nó thảo luận về dịch vụ vị trí

http://www.scotthelme.co.uk/android-location-services/

+0

Ok có vẻ như là Settings.Secure.getString (getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); thansk, bất kỳ ý tưởng làm thế nào để mở nó từ ứng dụng của tôi? –

+1

link is dead ... –

8

Bạn có thể kiểm tra xem nó như thế :

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) // Return a boolean 

EDIT:

Nếu bạn muốn kiểm tra các nhà cung cấp mạng:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) // Return a boolean 

EDIT 2:

Nếu bạn muốn mở các thiết lập, bạn có thể sử dụng mục đích này:

Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
+0

Nếu tôi muốn có vị trí hiện tại nhờ Wifi? –

+0

Bạn cũng có thể kiểm tra tính khả dụng của nhà cung cấp mạng (thay thế 'LocationManager.GPS_PROVIDER' bằng 'LocationManager.NETWORK_PROVIDER'). – Brtle

+1

Nếu bạn muốn Wifi sử dụng nhà cung cấp NETWORK. Hãy xem tài liệu và các bài viết chính thức trên Android, chẳng hạn như: http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html (và lưu ý có những nội dung mới hơn bây giờ, thông qua Google Dịch vụ Play, như nhà cung cấp hợp nhất: https://developer.android.com/google/play-services/location.html. –

0

Thật không may, có vẻ như việc sử dụng Settings.Secure.LOCATION_PROVIDERS_ALLOWED bị phản đối từ API 19.

Một cách mới để làm điều đó sẽ là:

int locationMode = Settings.Secure.getInt(
    getContentResolver(), 
    Settings.Secure.LOCATION_MODE, 
    Settings.Secure.LOCATION_MODE_OFF // Default value if not found 
); 

if (locationMode == Settings.Secure.LOCATION_MODE_OFF) { 
    // Location is off 
} 
2

Một cách khác để làm điều đó mà không sử dụng Settings.Secure và không quét tất cả các nhà cung cấp vị trí sẽ làm:

LocationManager locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE); 
int providersCount = locationManager.getProviders(true).size(); // Listing enabled providers only 
if (providersCount == 0) { 
    // No location providers at all, location is off 
} 
-1

Có hai cách để kiểm tra vị trí, 1-sử dụng GPS Nhà cung cấp mạng 2 sử dụng tốt hơn để kiểm tra cả hai dịch vụ có được bật hay không. d :)

public boolean checkServices(){ 
    //check location service 
    LocationManager locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
    if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && 
      locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 
      return true; 
    } 
} 
+0

tôi không biết tại sao một số cho tôi -1 cho điều này ...giải pháp này là công trình cho tôi và im bằng cách sử dụng it.if giải pháp didnt làm việc với bạn thử một giải pháp không đánh dấu là -1 idiot, –