2012-04-12 23 views
5

Tôi có thể kiểm tra xem GPS có đang bật hay không bằng isProviderEnabled(). Nếu nó không được bật, tôi sẽ khởi chạy ý định để người dùng có thể bật GPS. Cuối cùng tôi lại kiểm tra xem GPS có được bật bởi người dùng hay không. Nếu người dùng không bật GPS và thoát ra, vẫn isProviderEnabled() đang trả về NULL. Điều gì có thể là vấn đề? Xin vui lòng hướng dẫn cho tôi.GPS chưa được bật nhưng isProviderEnabled() đang trả về true

String provider = LocationManager.GPS_PROVIDER; 
    // Check if GPS is enabled 
    boolean enabled = myLocationManager.isProviderEnabled(provider); 

    if (!enabled) { 
        // GPS not enabled 
     Log.d("", "Provider " + provider + " is not enabled"); 
     Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
     startActivity(intent); 
        // Consider the case when user does not enable GPS and come out. 
    } else { 
     Log.d("", "Provider is enabled"); 

    }  

      // Re-check if user has enabled or not. (Note: case: user has not enabled GPS) 
    enabled = myLocationManager.isProviderEnabled(provider); 
    if(!enabled) 
    { 

     Log.d("","provider not enabled"); 
    } 
      else 
      { 
        // Control is coming here though user has not enabled GPS in settings 
        Log.d("","GPS is enabled"); 
      } 

Cảm ơn, Biplab

Trả lời

8

Kiểm tra GPS cho phép sử dụng mã này và cho tôi biết những gì xảy ra,

private void CheckEnableGPS(){ 
    String provider = Settings.Secure.getString(getContentResolver(), 
     Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
     if(!provider.equals("")){ 
      //GPS Enabled 
     Toast.makeText(AndroidEnableGPS.this, "GPS Enabled: " + provider, 
      Toast.LENGTH_LONG).show(); 
     }else{ 
     Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
      startActivity(intent); 
     } 
    } 
+0

Cảm ơn, Nó là hoàn hảo như tôi muốn. –

+1

Không làm việc cho tôi, tôi đã thử nó với gps kích hoạt và vô hiệu hóa, và có cùng một bánh mì nướng cả hai lần. –

+0

@BillGary có thể do nhà cung cấp mạng hoặc thụ động của bạn vẫn hoạt động. Chuỗi nhà cung cấp đó phải chứa TẤT CẢ các nhà cung cấp được bật và không chỉ GPS. Kiểm tra của ông cho null chỉ cho chúng ta biết rằng một nhà cung cấp được kích hoạt, và không thực sự là. – Guardanis

5

Tôi đã có vấn đề này trên một thiết bị vật lý thực tế.

Tôi đã thực hiện một vài bài kiểm tra bằng cách sử dụng các vị trí mô phỏng trên thiết bị Android vật lý của mình và sau đó chuyển về vị trí thực bằng GPS (mã được làm sạch tất cả các vị trí mô phỏng). Một điểm này, cho dù GPS đã bị dừng hay không, ứng dụng sẽ luôn trả về "true" (GPS được kích hoạt) và vì một lý do nào đó sẽ không đăng ký vị trí thực nữa.

Trong trường hợp này, khởi động lại thiết bị vật lý đã giải quyết được sự cố.

+0

Tôi đã lo lắng về ứng dụng của mình. Điều này đã giúp rất nhiều. Cảm ơn! Ngoài ra, có cách nào để đặt lại vị trí giả lập theo lập trình không? Tôi muốn đảm bảo tính toàn vẹn của ứng dụng ngay cả đối với những phần khét tiếng của khán giả. – SlashG

+0

Tôi không chắc chắn những gì bạn đang yêu cầu, nhưng đối với tôi (trở lại khi tôi đã thử nó) nó là cách duy nhất tôi có thể thiết lập lại các địa điểm. – Pelpotronic

+0

Chỉ cần bật và tắt vị trí, đây là những gì tôi đang làm với Ứng dụng của mình, chỉ cần làm cho người dùng khởi động lại GPS và sau đó sử dụng 'BroadcastReciever' để đảm bảo người dùng thực sự khởi động lại nó. – Dennis

0

Đã cùng một vấn đề nơi isProviderEnabled() sẽ trở thành sự thật trên các thiết bị < lollipop

Dựa trên câu trả lời của tôi user370305 cập nhật phương pháp của tôi như sau:

private boolean isLocationEnabled() { 

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 

     String provider = Settings.Secure.getString(getContentResolver(), 
       Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 

     return !provider.equals(""); 

    } else { 

     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     return gps || network; 

    } 

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