Configuración de Android en meta-datos o en el archivo de propiedades?
Estoy escribiendo una biblioteca que es utilizada por los desarrolladores y tengo un elementos de configuración como apiKey
, environment
y otros. Quiero que el desarrollador establezca estos valores, mi primer pensamiento fue usar el archivo de propiedades de Java que cargue en la clase de aplicaciones, pero he visto Google Play y Google Map SDK pedir a los desarrolladores que agreguen su apiKey en meta-data tag en Android Manifiesto. ¿Cuál es la forma recomendada?
- Cómo hacer 10 pulgadas tablet código compatible con la tableta de 7 pulgadas en android
- ¿Qué son los metadatos? ¿Y cuál es el uso de él en android
- Diferencia entre usos-permiso
- ActionBar no funciona al extender ListActivity
- ¿Cómo evitar la pantalla en negro mientras se invoca otra actividad en android?
- ¿Cómo obtener el número de compilación / versión de tu aplicación de Android?
- Mezcla de manifiesto de Android: diferentes actividades de lanzamiento del proyecto de biblioteca
- Android: HTTPClient
- El manifiesto de Android utiliza permisos contra las especificaciones de dispositivos Android
- Por qué usar android: configChanges es una mala práctica
- ¿Cuál es la forma correcta de especificar una acción de intención en el archivo de manifiesto?
- Quitar la aplicación del programa de lanzamiento mediante programación en Android
- ¿Cómo usar una actividad de lanzador diferente en un sabor de producto?
La forma android recomendada para permitir que el usuario defina valores para su biblioteca desde el módulo de aplicación es a través de meta-tags
Es tan fácil como usar este código en el android-manifiesto
<meta-data android:name="com.yourproject.apikey" android:value="apikey"/>
Y puedes obtener estos valores de tu biblioteca de esta manera
try { ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = applicationInfo.metaData; String apiKey = bundle.getString("com.yourproject.apikey"); } catch (NameNotFoundException e) { //Resolve error for not existing meta-tag, inform the developer about adding his api key }
Los principales beneficios de este enfoque son:
1) Que puede permitir que el usuario defina diferentes valores por tipo de dispositivo, por ejemplo, teléfono, tableta o sdk-versión (esto puede no ser aplicable para su caso, pero es un buen punto seguro)
2) Puede agregar datos complejos como el valor en su meta-etiqueta, y puede usar esto si desea agregar una matriz de cadenas con todo el valor que desea declarar.
3) Dado que las meta-etiquetas son básicamente un paquete, es más fácil para usted
-
Lea estos valores en su código de biblioteca.
-
Tener valores predeterminados si el usuario no ha declarado las meta-etiquetas necesarias.
(Creo que analizar las propiedades de los activos requiere más código sin ninguna gran ventaja)
4) También puede agregar meta-tags de configuración para actividades, proveedores y broadcastreceiver en su AndroidManifest.
5) También supongo que es más fácil pedir a los consumidores de su biblioteca para agregar un poco de información meta en su Manifiesto de Android, que añadir un archivo de propiedades en su carpeta de activos.Eso creo que esta es la razón principal Muchas bibliotecas conocidas Utilice este enfoque como google-play-service, google-maps, librerías de informes de fallos y muchas bibliotecas que proporcionan análisis de usuario.
Buena suerte
Parece que usar meta-data tag es la forma de Android para lograr esto, aunque no puedo encontrar ninguna documentación oficial para argumentar por qué.
Utilizando metadatos, puede definir el valor de la propiedad utilizando un recurso en lugar de un valor estático, de esta manera puede obtener valores diferentes para la misma propiedad en función del calificador de recursos. Esto es muy útil si su propiedad necesita internalización.
Ex:
<meta-data android:value="foo.bar" android:name="@string/hello" />
Es fácil de usar este <meta-data android:name="com.google.android.geo.API_KEY" android:value="API_KEY"/>
- Android BroadCastReceiver para la tecla de volumen arriba y abajo
- Crash en ListView.removeFooterView (Ver)