2015-09-16 10 views

Odpowiedz

46

Use ContextCompat.checkSelfPermission(), ActivityCompat.requestPermissions() i ActivityCompat.shouldShowPermissionRequestRationale(), z biblioteki support-v4 (V23 lub wyższe). Są one kompatybilne wstecz; jeśli używasz starszej wersji Androida, "zrobią to, co trzeba" (np. zwróć PackageManager.PERMISSION_GRANTED dla ContextCompat.checkSelfPermission()).

+1

Dzięki! Biblioteka pomocy v4 to dobra decyzja. – Ardi

+1

Tak, zawsze zwracaj PERMISSION_GRANTED przed v23 – weigan

+3

Używam również wsparcia v4 i ContextCompat.checkSelfPermission (this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED zwraca false w HTC Incredible z Androidem 2.3.3. Każdy pomysł, dlaczego? – Anonymous

1

Możesz sprawdzić wersję kompilacji if(Build.Version.SDK_INT >= Build.VERSION_CODES.MARSHMALLOW). A następnie zajmij się tymi prawami, a poza tym zajmij się innymi wersjami.

4

prostu sprawdzić swoją wersję androida zanim pojawi się sprawdzić uprawnienia:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
        // TODO: Consider calling 
        // public void requestPermissions(@NonNull String[] permissions, int requestCode) 
        // here to request the missing permissions, and then overriding 
        // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
        //           int[] grantResults) 
        // to handle the case where the user grants the permission. See the documentation 
        // for Activity#requestPermissions for more details. 
        return; 
       } 
      }else{ 
       //Do Your Stuff 
      } 
0

checkSelfPermission jest dostępny powyżej sdk 23.

możemy sprawdzić, czy zezwolenie jest dostępne r nie używa menedżera pakietów

public static Boolean checkpermissions(Activity activity) { 


     PackageManager mPackageManager = activity.getPackageManager(); 
     int hasPermStorage = mPackageManager.checkPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, activity.getPackageName()); 


     if (hasPermStorage != PackageManager.PERMISSION_GRANTED) { 
      // do stuff 
      //Toast.makeText(getApplicationContext(), "No permission", Toast.LENGTH_LONG).show(); 

      return false; 
     } else if (hasPermStorage == PackageManager.PERMISSION_GRANTED) { 

      // do stuff 
      //Toast.makeText(getApplicationContext(), "Has permission", Toast.LENGTH_LONG).show(); 

      return true; 
     }else 
      return false; 
    } 
Powiązane problemy