2011-11-28 26 views
14

manifest.xml dosyasındaki belirli bir izni koddan nasıl denetlerim? Uygulamam için gereken bazı izinlerin eksik olması durumunda bir istisna atmak istiyorum.Koddan izin alma iznini kontrol etmenin bir yolu var mı?

örnek, FINE_LOCATION ve COARSE_LOCATION ben robot da GPS kullanarak spesifik activiy kurulması üzerinde bir istisna olacağını biliyorum, ama tezahür kontrol ve uygulama açılışında bir istisna oluşturmaya gerek kendisi. Bu yalnızca konum erişimi için değil, aynı zamanda diğer izinler için de geçerlidir.

Herhangi bir öneride yardımcı olabilir.

cevap

33

PackageManager'u kullanarak iznin verilmesine izin verilip verilmediğini kontrol edebilirsiniz. Örneğin

PackageManager pm = getPackageManager(); 
    if (pm.checkPermission(permission.FINE_LOCATION, getPackageName()) == PackageManager.PERMISSION_GRANTED) { 
     // do something 
    } else { 
     // do something 
    } 
+5

HedefSdkVersion'u 23 olarak ayarlarsanız yukarıdaki çözüm Android 6.0'da çalışmayacaktır. – user2448396

4

For You aşağıdakileri kullanarak çalışma zamanında kullanılabilir <uses-permission> etiketlerini okuyabilir. Eski Android sürümlerinde test edildi VE Android 6 ve 7

PackageManager pm = getPackageManager(); 
try 
{ 
    PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS); 
    String[] requestedPermissions = null; 
    if (packageInfo != null) { 
     requestedPermissions = packageInfo.requestedPermissions; 
    } 

    if (requestedPermissions != null && requestedPermissions.length > 0) 
    { 
     List<String> requestedPermissionsList = Arrays.asList(requestedPermissions); 
     ArrayList<String> requestedPermissionsArrayList = new ArrayList<String>(); 
     requestedPermissionsArrayList.addAll(requestedPermissionsList); 

     Log.i(ExConsts.TAG, ""+requestedPermissionsArrayList); 
    } 
} 
catch (PackageManager.NameNotFoundException e) 
{ 
    e.printStackTrace(); 
} 
İlgili konular