Программно получить разрешения от manifest.xml в android

Я должен программно получить разрешения из manifest.xml приложения android, и я не знаю, как это сделать.

Я прочитал сообщение здесь, но я не полностью удовлетворен ответами. Я предполагаю, что в API андроида должен быть класс, который позволит извлекать информацию из манифеста.

Спасибо.

Вы можете использовать этот метод:

//for example, permission can be "android.permission.WRITE_EXTERNAL_STORAGE" public boolean hasPermission(String permission) { try { PackageInfo info = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS); if (info.requestedPermissions != null) { for (String p : info.requestedPermissions) { if (p.equals(permission)) { return true; } } } } catch (Exception e) { e.printStackTrace(); } return false; } 

Вот полезный метод утилиты, который делает именно это.

 public static String[] retrievePermissions(Context context) { try { return context .getPackageManager() .getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS) .requestedPermissions; } catch (PackageManager.NameNotFoundException e) throw new RuntimeException ("This should have never happened.", e); // I'd return null and Log.wtf(...) in production } 

Использовать это:

 public static String getListOfPermissions(final Context context) { String _permissions = ""; try { final AssetManager _am = context.createPackageContext(context.getPackageName(), 0).getAssets(); final XmlResourceParser _xmlParser = _am.openXmlResourceParser(0, "AndroidManifest.xml"); int _eventType = _xmlParser.getEventType(); while (_eventType != XmlPullParser.END_DOCUMENT) { if ((_eventType == XmlPullParser.START_TAG) && "uses-permission".equals(_xmlParser.getName())) { for (byte i = 0; i < _xmlParser.getAttributeCount(); i ++) { if (_xmlParser.getAttributeName(i).equals("name")) { _permissions += _xmlParser.getAttributeValue(i) + "\n"; } } } _eventType = _xmlParser.nextToken(); } _xmlParser.close(); // Pervents memory leak. } catch (final XmlPullParserException exception) { exception.printStackTrace(); } catch (final PackageManager.NameNotFoundException exception) { exception.printStackTrace(); } catch (final IOException exception) { exception.printStackTrace(); } return _permissions; } // Test: Log.wtf("test", getListOfPermissions(getApplicationContext())); 

Вы можете использовать эту функцию:

 public boolean hasPermission(Context ctx,String permission){ return ctx.getPackageManager().checkPermission(permission, ctx.getPackageName()) == PackageManager.PERMISSION_GRANTED); } 

Применение:

 hasPermission(this,Manifest.permission.GET_ACCOUNTS);