Я пытаюсь получить доступ к списку разрешений в Manifest.permission, который является окончательным классом. Как получить доступ к объявленным значениям String?Программный доступ к Manifest.permission?
ответ
буквально, я считаю, что вопрос о том, как просто получить список возможных разрешений, а не во время выполнения разрешений на упаковке. Предполагая, что это правда, это просто вопрос размышлений.
Вы бы сделать что-то вроде этого (не компилируется):
List<Field> permissionFields = new ArrayList<Field>();
Field[] fields = Manifest.permission.class.getDeclaredFields();
for (Field declField : fields) {
if ((declField.getType() == String.class) && Modifier.isFinal(declField.getModifiers())) {
permissionFields.add(declField);
}
}
В списке «permissionFields» содержит список объектов, являющихся значениями разрешения. Вы можете использовать метод Field.getObject (obj) для получения значения String (любопытно, что не существует метода «Field.getString (obj)», хотя есть несколько других «Field.get (obj) "(возможно, потому, что String не является примитивным)).
Вот код:
Log.d(TAG, "Getting permissions for " + packageName);
try {
PackageInfo pkgInfo = getPackageManager().getPackageInfo(
packageName,
PackageManager.GET_PERMISSIONS
);
PermissionInfo[] permissions = pkgInfo.permissions;
if (permissions == null) {
permissionsField.setText("No declared permissions");
}
else {
String permissionsText = "";
for (int i = 0; i < permissions.length; i++) {
switch (permissions[i].protectionLevel) {
case 0:
permissionsText += permissions[i].name + ":::" + "NORMAL" + "\n";
break;
case 1:
permissionsText += permissions[i].name + ":::" + "DANGEROUS" + "\n";
break;
case 2:
permissionsText += permissions[i].name + ":::" + "SIGNATURE" + "\n";
break;
case 3:
permissionsText += permissions[i].name + ":::" + "SIGNATUREORSYSTEM" + "\n";
break;
}
}
permissionsField.setText(permissionsText);
}
String[] requestedPermissions = pkgInfo.requestedPermissions;
if (requestedPermissions == null) {
requestedPermissionsField.setText("No requested permissions");
}
else {
String reqPermText = "";
for (int i = 0; i < requestedPermissions.length; i++) {
reqPermText += requestedPermissions[i] + "\n";
}
requestedPermissionsField.setText(reqPermText);
}
}
catch (PackageManager.NameNotFoundException e) {
permissionsField.setText("Package Not Found");
requestedPermissionsField.setText("Package Not Found");
}
обязательно прочтите пожалуйста. Это было бы хорошим ответом, если бы это было то, о чем я просил. – Phil
- 1. Программный доступ к vTiger?
- 2. Программный программный доступ к переносимости носа
- 3. Программный доступ к библиотеке iPod
- 4. Программный доступ к подсмотру UIScrollView
- 5. Программный доступ к счетчику KNOX
- 6. Программный доступ к истории TFS
- 7. Программный доступ к веб-странице
- 8. Программный доступ к объектам изображений
- 9. Программный доступ к CloudConfigurationManager Azure
- 10. Программный доступ к значку приложения
- 11. Программный доступ к контроллерам представлений
- 12. Программный доступ к каталогу ~/Content?
- 13. Программный доступ к репозиторию Subversion
- 14. Программный доступ к идентификатору UIViewController
- 15. Программный доступ к истории браузера
- 16. Программный доступ к определению typespec
- 17. Sharepoint 2007 Программный доступ к отслеживанию использования
- 18. программный доступ к инвентарю дилеров автомобилей
- 19. Программный доступ к Apple Watch Crown
- 20. Программный доступ к рабочим документам Amazon
- 21. Программный доступ к стеку вызовов в .net
- 22. Программный доступ к подсказке формы Visio
- 23. iOS: Программный доступ к операциям родительского контроля?
- 24. Программный доступ к фотографиям на андроиде
- 25. Программный доступ к MessageHandlers, открытый через JMX
- 26. Программный доступ к элементу управления с DataTemplate
- 27. Программный доступ к CIL для .NET-типа
- 28. Программный доступ к закладкам Google Chrome
- 29. Программный доступ к подробным историческим финансовым данным
- 30. Программный доступ к тонам докеров с хоста
То, что мне нужно. Благодаря! – Phil