1097 votes

Manière statique pour obtenir un contexte sur android ?

Y a-t-il un moyen d’obtenir l’instance du contexte actuel en utilisant une méthode statique ?

Je cherche de cette façon parce que je déteste enregistrer l’instance de contexte chaque fois qu’il modifie.

1411voto

Rohit Ghatol Points 4894

Pour ce faire

Dans le fichier de manifeste Android déclarer suivant

puis écrire la classe

Maintenant chaque où appeler `` pour obtenir votre contexte d’application statiquement.

51voto

Erich Douglass Points 21714

Non, je ne pense pas qu’il y a. Malheureusement, vous êtes coincé à l’appel de ou un des autres sous-classes de la `` . En outre, cette question est un peu liée.

40voto

KennyTM Points 232647

Voici un sans-papiers d'obtenir une Application (qui est un Contexte) à partir de n'importe où dans le thread de l'INTERFACE utilisateur. Il s'appuie sur l'cachés méthode statique ActivityThread.currentApplication(). Il doit travailler au moins sur Android 4.x.

try {
    final Class<?> activityThreadClass =
            Class.forName("android.app.ActivityThread");
    final Method method = activityThreadClass.getMethod("currentApplication");
    return (Application) method.invoke(null, (Object[]) null);
} catch (final ClassNotFoundException e) {
    // handle exception
} catch (final NoSuchMethodException e) {
    // handle exception
} catch (final IllegalArgumentException e) {
    // handle exception
} catch (final IllegalAccessException e) {
    // handle exception
} catch (final InvocationTargetException e) {
    // handle exception
}

Notez qu'il est possible pour que cette méthode renvoie null, par exemple, lorsque vous appelez la méthode en dehors de la thread de l'INTERFACE utilisateur, ou de l'application n'est pas lié à la discussion.

Il est toujours préférable d'utiliser @RohitGhatol's solution si vous pouvez modifier le code de l'Application.

33voto

gulchrider Points 1827

Dépend de ce que vous utilisez le contexte, je peux penser au moins un des inconvénients de cette méthode :

Si vous essayez de créer un avec , la contexte ne fonctionnera pas. Je crois que vous avez besoin du contexte pour le courant ...

12voto

user605331 Points 925

Si vous êtes ouvert à l’utilisation de RoboGuice, vous pouvez avoir le contexte injecté dans n’importe quelle classe que vous voulez. Voici un petit échantillon de la façon de le faire avec RoboGuice 2.0 (beta 4 au moment d’écrire ces lignes)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X