2016-03-28 5 views
0
 locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

     //getting GPS status 
     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     //getting network status 
     isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

i Marshmallow kontrol Her ne kadar ikisi de yanlıştır, çalışma zamanı izinleri gibi bir şey var, bu yüzden bu bağlantılar link1 ve link2Android Zefir, hep locationManager.isProviderEnbled return false

izledi Ve bazı hata ayıklama yaptım ve koyarak isNetworkEnabled önce checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION); olan 0 döndürür PERMISSION_GRANTED

Kod

public class SplashScreenActivity extends Activity { 

    private static final String TAG = "SplashScreenActivity"; 
    boolean isGPSEnabled = false; 

    // flag for network status 
    boolean isNetworkEnabled = false; 

    final private int REQUEST_CODE_ASK_PERMISSIONS = 123; 

    @TargetApi(Build.VERSION_CODES.M) 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.activity_splashscreen); 

     int hasLocationPermission = checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION); 
     if (hasLocationPermission != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
        REQUEST_CODE_ASK_PERMISSIONS); 
      return; 
     } 
     //comes till here . ie hasLocationPermission is true 
     LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE); 

     checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION); //breakpoint at this line gives 0 ie PERMISSION_GRANTED 

     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); //false at debug breakpoint 
     isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);//false at debug breakpoint 

    } 


} 

Manifest

+1

Bunu nerede yürütüyorsunuz? Bir emülatörde veya gerçek bir cihazda mı? Gerçekse, lütfen durumu belirtin: Model, Oluştur (OS sürümü ve derleme numarası) ve ilgili olabilecek herhangi bir logcat .... Muhtemelen 2 farklı etkinliğe sahip olmanız veya 1'in izinleri olan whatever'larınız var demektir ve 1'i değil. .. Ayrıca '' ınWriterContactsPermission' için GPS kontrol kötü bir uygulamadır ... başka bir kişinin okuyabilir ve bu değişkenin ne olduğunu EXACTLY anlayabileceği isimleri kullanın .... aynı Build.VERSION.SDK_INT> = 23 geçerlidir [chek this ] (http://stackoverflow.com/questions/47882/what-is-a-magic-number-and-why-is-it-bad) – Bonatti

+0

Lütfen bunu bir kez kontrol edin. http://stackoverflow.com/questions/16748300/locationmanager-isproviderenabledlocationmanager-network-provider-is-not-relia?lq=1 –

+0

@Bonatti bunu cihazda yürüten hasLocationPermission öğesine güncelledi: Samsung Edge 6, android M, android ver 6.0.1 build # MMB29K.G925IDVU3EPC5, burada http://pastebin.com/9WstqwL1 günlüğe kaydeder, ancak hata ayıklama ile ben bu sorunun locationManager.isProviderEnabled olduğunu belirtebilirim sadece –

cevap

1

konu Here Cihaz ileSplashScreenActivity i Nexus 5x ve kod aynı parça true döndürür ile çalıştı. Sayı O kullanıcı izinlerine sahip veya değil- kontrol etmek için bir boolean tipi yöntemi oluşturun

versions- tüm android üzerinde çalışacak, samsung

1

Kullanım son hatmi güncelleme ile bu kod parçasıdır

private boolean checkPermission() { 

    boolean flag = true; 

    String[] permissions = {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION"}; 
    boolean hasPermission = (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED); 
    if (!hasPermission) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      requestPermissions(permissions, com.jeenees.androidapp.utils.Keys.FILE_READ_PERMISSION); 
      flag = false; 
     } 
    } else { 
     flag = true; 
    } 

    return flag; 
} 

bu size yardımcı olacaktır gibi-

LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 

if (checkPermission()){ 
      isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); //false at debug breakpoint 
      isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);//false at debug breakpoint 
    } 

Umut istediğiniz yukarıdaki yöntemi kullanın.