Recuperar mediante programación permisos de manifest.xml en android
Tengo que recuperar los permisos mediante programación desde el manifest.xml de una aplicación de Android y no sé cómo hacerlo.
Leí el mensaje aquí, pero las respuestas no me satisfacen totalmente. Supongo que debería haber una clase en la API de Android que permitiría recuperar información del manifiesto.
- No se puede iniciar la actividad ComponentInfo {com.example.countryselect / com.example.countryselect.OfferSelect}
- Crear varias tablas para una clase en ORMLite
- ¿Cómo puedo saber si existen extras de Intent en Android?
- ¿Cómo depurar el código fuente de java cuando implemento un detector personalizado para Lint?
- MediaMetadataRetrieverJNI: getEmbeddecPicture ha fallado
Gracias.
- Android Studio generado APK se bloquea al ejecutar la aplicación en el mismo teléfono funciona bien. ¿Qué está mal?
- ¿Cómo configuro IntelliJ IDEA para aplicaciones de Android?
- Problema de base de datos SQLite en TextView
- ¿Cómo se calcula el tiempo del rezo musulmán en una aplicación androide?
- ¿Cómo evitar que el cliente vea clases privadas internas en la biblioteca de Android?
- Cómo publicar datos utilizando el método POST en Android
- Dibujar línea discontinua en Android mediante programación
- Uso de ProGuard con Android.
Puede utilizar este método:
//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; }
Aquí hay un método de utilidad útil que hace exactamente eso.
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 }
Utilizar esta:
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()));
Puede utilizar esta función:
public boolean hasPermission(Context ctx,String permission){ return ctx.getPackageManager().checkPermission(permission, ctx.getPackageName()) == PackageManager.PERMISSION_GRANTED); }
Uso:
hasPermission(this,Manifest.permission.GET_ACCOUNTS);
- La fusión de manifiesto de Android falla para receptores con el mismo nombre pero con contenido diferente
- Problemas para mantener vivo el mensaje de Google Cloud