Je suis conscient de la disponibilité de Context.getApplicationContext () et View.getContext () , à travers lequel je peux réellement appeler Context.getPackageName () pour récupérer le nom de package d'une application.
Ils fonctionnent si j'appelle à partir d'une méthode à laquelle un View
ou un Activity
objet est disponible, mais si je veux trouver le nom du package dans une classe totalement indépendante sans View
ou Activity
, existe-t-il un moyen de le faire (directement ou indirectement)?
android
package
android-context
ef2011
la source
la source
Réponses:
Une idée est d'avoir une variable statique dans votre activité principale, instanciée pour être le nom du package. Il suffit ensuite de référencer cette variable.
Vous devrez l'initialiser dans la
onCreate()
méthode de l'activité principale :Global à la classe:
Alors..
Vous pouvez ensuite y accéder via
Main.PACKAGE_NAME
.la source
final
cela le rend immuable, initialisable uniquement dans un constructeur et une seule fois .onCreate()
n'est pas un constructeur. Veuillez corriger si je me trompe.onCreate
devra être rappelé de toute façon, donc cette solution ne devrait toujours pas poser de problème.Si vous utilisez le plugin gradle-android pour créer votre application, vous pouvez utiliser
pour récupérer le nom du package à partir de n'importe quelle étendue, incl. statique.
la source
Si avec le mot "n'importe où" vous voulez dire sans avoir un explicite
Context
(par exemple à partir d'un fil d'arrière-plan), vous devez définir une classe dans votre projet comme:Ensuite, dans votre,
manifest
vous devez ajouter cette classe auName
champ de l'Application
onglet. Ou éditez le xml et mettezpuis de n'importe où vous pouvez appeler
J'espère que cela aide.
la source
Application.onCreate()
a été modifiée pour refléter cela: elle indique désormais spécifiquement "Appelé au démarrage de l'application, avant toute activité, service ou objet récepteur (à l'exclusion des fournisseurs de contenu)".Si vous utilisez la construction gradle, utilisez ceci:
BuildConfig.APPLICATION_ID
pour obtenir le nom du package de l'application.la source
la source
Vous pouvez obtenir le nom de votre package comme suit:
Voici les options:
la source
Vous pouvez utiliser une méthode non documentée
android.app.ActivityThread.currentPackageName()
:Attention: cela doit être fait sur le thread principal de l'application.
Merci à ce billet de blog pour l'idée: http://blog.javia.org/static-the-android-application-package/ .
la source
Pour ceux qui utilisent Gradle, comme @Billda l'a mentionné, vous pouvez obtenir le nom du package via:
Cela vous donne le nom du package déclaré dans votre gradle d'application:
Si vous souhaitez obtenir le nom du package utilisé par vos classes java (qui est parfois différent de
applicationId
), vous pouvez utiliserSi vous ne savez pas lequel utiliser, lisez ici :
la source
J'espère que cela fonctionnera.
la source
Créez un module java à exécuter initialement lors du démarrage de votre application. Ce module étendrait la classe d'application Android et initialiserait toutes les variables d'application globales et contiendrait également des routines utilitaires à l'échelle de l'application -
Bien sûr, cela pourrait inclure une logique pour obtenir le nom du package à partir du système Android; cependant, le code ci-dessus est plus petit, plus rapide et plus propre que celui obtenu auprès d'Android.
Assurez-vous de placer une entrée dans votre fichier AndroidManifest.xml pour indiquer à Android d'exécuter votre module d'application avant d'exécuter des activités -
Ensuite, pour obtenir le nom du package à partir de tout autre module, entrez
L'utilisation d'un module d'application vous donne également un contexte pour les modules qui ont besoin mais n'ont pas de contexte.
la source
Utilisez: BuildConfig.APPLICATION_ID pour obtenir le NOM DU PAQUET n'importe où (c'est-à-dire les services, le récepteur, l'activité, le fragment, etc.)
Exemple: String PackageName = BuildConfig.APPLICATION_ID;
la source
Importez simplement Android.app ,, vous pourrez alors utiliser:
<br/>Application.getProcessName()<br/>
Obtenez le nom du processus d'application actuel sans contexte, vue ou activité.
la source