2011-06-30 22 views
9

entiendo que no existe el nivel de aplicación disponible para ser capaz de definir lógicas/datos compartidos, y que cada actividad es esencialmente una aplicación independiente unidos por el manifiesto ...variables de ámbito Android nivel de aplicación

PERO tengo un grupo de permisos de acceso de usuario que recibo a través de una llamada de servicio web y no deseo hacer esta llamada en todas las actividades onCreate().

Estoy usando SharedPreferences en la aplicación, pero como los permisos no están destinados a ser editados por el usuario, la exposición de archivos sin formato en dispositivos Android parece ser una forma insegura de manejar esto.

Necesito volver a solicitar esta información si la aplicación se reinicia, por lo que creo que la menos costosa sería almacenarla en una variable.

Conozco IntentExtras, pero estamos hablando de un "Objeto" de configuración, no de un tipo primitivo.

forma correcta de manejar esta situación?

+0

Cree un singleton, cargue estas variables la primera vez que las desee y luego obtenga getters estáticos – Blundell

Respuesta

28

En realidad, puede crear una clase de "Aplicación" que se puede usar para crear esencialmente configuraciones de aplicación amplia.

Simplemente cree una nueva clase y amplíe la Aplicación, luego configure los miembros de la clase y los métodos getter/setter apropiados y podrá acceder a ellos a través de su aplicación.

A continuación, deberá actualizar el manifiesto de la siguiente manera:

<application android:icon="@drawable/logo" 
      android:label="@string/app_name" 
      android:name=".application.CustomApplication"> 

Luego, en cualquier actividad que se pueda acceder a ella de la siguiente manera:

CustomApplication app = ((CustomApplication)getApplication()); 
+1

¿Esta información debe ser estática? o ¿'getApplication()' le devuelve un Objeto ya instanciado que dura todo el ciclo de vida? – jondavidjohn

+1

No, no necesita ser estático, getApplication obtiene el objeto de aplicación instanciado (la clase de aplicación siempre se crea una instancia cuando la aplicación se está ejecutando) – rhinds

+0

impresionante, esto debería funcionar perfectamente, lo aceptaré después de que lo pruebe. – jondavidjohn

1

creo que el uso de preferencias compartidas es bastante seguro. ¡Solo los usuarios avanzados con conocimientos de raíz, rom personalizadas y conocimientos de piratería podrían aprovechar esta oportunidad! (Ni siquiera estoy seguro de que esto sea posible).

Además de SharedPreferences, también podría implementar un objeto de Aplicación personalizado y mantener sus permisos allí.

De todos modos, como desarrollador, creo que es mucho más probable que sea pirateado en alguna parte de la solicitud que hago para obtener los permisos de usuario (uso de https, etc.) y descompilar mi aplicación.

+0

Sin preocuparse por la descompilación, las preferencias compartidas van a un archivo plano no cifrado. No me preocupa que alguien "obtenga" la información, solo me preocupa la edición durante la ejecución (ajustes de permisos, etc.) – jondavidjohn

+0

Y no, prefiero diseñar con el denominador común más alto, y en estos días debe suponer que su usuario está rooteado y tiene acceso a adb. – jondavidjohn

+0

Luego, almacene los datos en la memoria (usando un objeto de aplicación personalizado) –

Cuestiones relacionadas