Estou ciente da disponibilidade de Context.getApplicationContext () e View.getContext () , através do qual posso chamar Context.getPackageName () para recuperar o nome do pacote de um aplicativo.
Eles funcionam se eu chamar de um método para o qual um View
ou um Activity
objeto está disponível, mas se eu quiser encontrar o nome do pacote de uma classe totalmente independente sem View
ou Activity
, existe uma maneira de fazer isso (direta ou indiretamente)?
android
package
android-context
ef2011
fonte
fonte
Respostas:
Uma idéia é ter uma variável estática em sua atividade principal, instanciada para ser o nome do pacote. Então apenas faça referência a essa variável.
Você precisará inicializá-lo no
onCreate()
método da atividade principal :Global para a classe:
Então..
Você pode acessá-lo via
Main.PACKAGE_NAME
.fonte
final
torna imutável, capaz de inicializar apenas em um construtor e apenas uma vez .onCreate()
não é um construtor. Corrija se estou enganado.onCreate
terá que ser chamado novamente de qualquer maneira, portanto, essa solução ainda não deve ser um problema.Se você usar o gradle-android-plugin para criar seu aplicativo, poderá usar
para recuperar o nome do pacote de qualquer escopo, incl. um estático.
fonte
Se com a palavra "em qualquer lugar" você quer dizer sem ter um explícito
Context
(por exemplo, de um thread em segundo plano), você deve definir uma classe em seu projeto como:Em seguida,
manifest
você precisará adicionar esta classe aoName
campo naApplication
guia Ou edite o xml e coloquee depois de qualquer lugar que você possa ligar
Espero que ajude.
fonte
Application.onCreate()
foi alterada para refletir isso: agora ela afirma especificamente "Chamada quando o aplicativo está iniciando, antes de qualquer atividade, serviço ou objeto receptor (excluindo provedores de conteúdo)".Se você usa o gradle build, use o seguinte:
BuildConfig.APPLICATION_ID
para obter o nome do pacote do aplicativo.fonte
fonte
Você pode obter o nome do seu pacote assim:
Aqui estão as opções:
fonte
Você pode usar o método não documentado
android.app.ActivityThread.currentPackageName()
:Advertência: Isso deve ser feito na rosca principal do aplicativo.
Obrigado a esta postagem no blog pela ideia: http://blog.javia.org/static-the-android-application-package/ .
fonte
Para aqueles que usam Gradle, como o @Billda mencionou, você pode obter o nome do pacote em:
Isso fornece o nome do pacote declarado no seu aplicativo gradle:
Se você estiver interessado em obter o nome do pacote usado por suas classes java (que às vezes é diferente de
applicationId
), você pode usarSe você está confuso sobre qual usar, leia aqui :
fonte
Espero que funcione.
fonte
Crie um módulo java para ser executado inicialmente ao iniciar seu aplicativo. Este módulo estenderia a classe Application Android e inicializaria todas as variáveis globais de aplicativos, além de conter rotinas de utilidade para todo o aplicativo -
Obviamente, isso pode incluir lógica para obter o nome do pacote no sistema Android; no entanto, o código acima é menor, mais rápido e mais limpo do que obtê-lo no Android.
Coloque uma entrada no arquivo AndroidManifest.xml para informar ao android para executar o módulo do aplicativo antes de executar qualquer atividade -
Em seguida, para obter o nome do pacote de qualquer outro módulo, digite
O uso de um módulo de aplicativo também fornece um contexto para os módulos que precisam, mas não têm um contexto.
fonte
Use: BuildConfig.APPLICATION_ID para obter PACKAGE NAME em qualquer lugar (por exemplo, serviços, destinatário, atividade, fragmento, etc.)
Exemplo: String PackageName = BuildConfig.APPLICATION_ID;
fonte
Basta importar o Android.app, então você pode usar:
<br/>Application.getProcessName()<br/>
Obtenha o nome atual do processo do aplicativo sem contexto, exibição ou atividade.
fonte