2011-11-28 130 views
14

如何從代碼中檢查manifest.xml中的特定權限?我想拋出一些異常,如果我的應用程序需要一些權限丟失。有沒有辦法檢查代碼的清單許可?

例如FINE_LOCATIONCOARSE_LOCATION我知道Android也將扔在推出即使用GPS的具體activiy的例外,但我需要檢查的清單,並在推出的應用程序拋出異常本身。這不僅適用於位置訪問,也適用於其他權限。

任何建議將有所幫助。

回答

33

您可以通過使用PackageManager來檢查權限是否被授予特定權限。例如

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

如果將targetSdkVersion設置爲23,則上述解決方案將無法在Android 6.0上運行 – user2448396

4

您可以在運行時使用以下代碼讀取可用的<uses-permission>標籤。在較舊的Android版本上進行測試AND Android 6和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(); 
} 
相關問題