Como obter a id do aplicativo Android?

92

No Android, como obtenho a id do aplicativo programaticamente (ou por algum outro método) e como posso me comunicar com outros aplicativos usando essa id?

Arams
fonte

Respostas:

143

Se você está procurando o valor definido por applicationIdno gradle, pode simplesmente usar

BuildConfig.APPLICATION_ID 
Jeremie
fonte
29
Isso não seria tão útil se você estivesse escrevendo uma biblioteca Android
Simon Featherstone,
Eu uso isso para obter o applicationId no meu teste do Espresso: private val targetContext = instrumentation.getTargetContext () private val ApplictionId = targetContext.getPackageName ();
a_subscriber
@SimonFeatherstone, você já descobriu como fazer isso em um módulo?
Mihai Fischer
@MihaiFischer você precisa criar uma função para inicializar o módulo / biblioteca e passar esse tipo de informação então.
Simon Featherstone
48

Se por application id, você está se referindo package name, você pode usar o método Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

No caso de você desejar se comunicar com outro aplicativo, existem várias maneiras:

  1. Inicie uma atividade de outro aplicativo e envie os dados nos “Extras” do “Intent”
  2. Envie uma transmissão com ação / categoria específica e envie dados nos extras
  3. Se você só precisa compartilhar dados estruturados, use o provedor de conteúdo
  4. Se o outro aplicativo precisar ser executado continuamente em segundo plano, use o Servidor e "vincule-se" ao serviço.

Se você conseguir elaborar seu requisito exato, a comunidade poderá ajudá-lo melhor.

Gaurav Vaish
fonte
E se eu quiser mostrar uma lista de aplicativos e precisar ter o id como um inteiro, assim como todos os adaptadores de lista precisam? Eu poderia usar o tempo de instalação, mas é um tipo longo. Lançar para int ainda ajudaria?
desenvolvedor do Android
4
o nome do pacote nem sempre é applicationId, quando você o configura por meio de build.gradle!
Jemshit Iskenderov
2
Na verdade, Context.getPackageName() faz retornar o ID do aplicativo e não o nome do pacote (embora eles geralmente são os mesmos). O nome um tanto confuso do método é legado. Fonte: developer.android.com/studio/build/application-id
LoPoBo
Context :: getPackageName não funciona se você usar kotlin, ele retorna "função getPackageName (reflexão Kotlin não está disponível)"
Derek Zhu
6

Não tenho certeza a qual "id do aplicativo" você está se referindo, mas para um identificador exclusivo do seu aplicativo, você pode usar:

método getApplication (). getPackageName () de sua atividade atual

reflog
fonte
2
cada aplicativo instalado tem um id único ... é possível obter o id único de um aplicativo de outro aplicativo
arams
3
Não é getApplicationContext().getPackageName()?
superarts.org
Suponha que você tenha tipos de compilação como release ou debug e tenha adicionado um sufixo, por exemplo, "debug" para diferenciá-lo do aplicativo principal, nesse caso getpackageName () fornecerá a você o originalpackagename.debug
Aman Verma
1

Caso contrário, você pode obter a id do processo em que seu aplicativo é executado:

final static int android.os.Process.myPid ()
Retorna o identificador desse processo, que pode ser usado com killProcess (int) e sendSignal (int, int).

Tony Frolov
fonte
1

Não tenho certeza para que você precisa do ID do aplicativo / instalação, mas você pode revisar as possibilidades existentes em um ótimo artigo de desenvolvedores Android:

Resumindo:

  • UUID.randomUUID() para criar id na primeira vez que um aplicativo é executado após a instalação e recuperação simples depois
  • TelephonyManager.getDeviceId() para identificador de dispositivo real
  • Settings.Secure.ANDROID_ID em dispositivos relativamente modernos
youri
fonte
0

O PackageInfo.sharedUserIdcampo mostrará o ID do usuário atribuído no manifesto .

Se você quiser que dois aplicativos tenham o mesmo userId, para que possam ver os dados um do outro e ser executados no mesmo processo, atribua a eles o mesmo userId no manifesto:

android:sharedUserId="string"

Os dois pacotes com o mesmo sharedUserId também precisam ter a mesma assinatura.

Eu também recomendaria ler aqui para um cutucão na direção certa.

Vai
fonte
2 aplicativos diferentes usam o mesmo nome de pacote significa, os aplicativos podem compartilhar os dados? ...
arams
Não. Se dois aplicativos tiverem o mesmo shareUserId E forem assinados com a mesma assinatura, eles poderão compartilhar dados. O nome do pacote não é um problema.
Será em
0

Se todo o propósito é comunicar dados com algum outro aplicativo, use os métodos sendBroadcast do Intent.

advantej
fonte
0

Se você estiver usando o novo sistema de compilação ** Gradle getPackageName, estranhamente retornará a ID do aplicativo, não o nome do pacote. Portanto, a resposta de MasterGaurav está correta, mas ele não precisa começar com ++

Se por id do aplicativo, você está se referindo ao nome do pacote ...

Veja mais sobre as diferenças aqui .

** não tão novo neste ponto

++ Sei que a resposta dele fez todo o sentido em 2011

tir38
fonte
0

Android App ES File Explorer mostra o nome do pacote Android na seção Aplicativos do usuário, que é útil para o Bitwarden. Bitwarden refere-se a isso como "ID do pacote do aplicativo Android (ou nome do pacote)".

Chris Good
fonte
0

Para rastrear instalações, você pode, por exemplo, usar um UUID como identificador e simplesmente criar um novo na primeira vez que um aplicativo for executado após a instalação. Aqui está um esboço de uma classe chamada “Instalação” com um método estático Installation.id (contexto de contexto). Você pode imaginar a gravação de mais dados específicos da instalação no arquivo INSTALLATION.

public class Installation {
private static String sID = null;
private static final String INSTALLATION = "INSTALLATION";
public synchronized static String id(Context context) {

    if (sID == null) {  
       File installation = new File(context.getFilesDir(), INSTALLATION);
       try {
           if (!installation.exists())
               writeInstallationFile(installation);
           sID = readInstallationFile(installation);
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
    }
   return sID;
}

private static String readInstallationFile(File installation) throws IOException {
   RandomAccessFile f = new RandomAccessFile(installation, "r");
   byte[] bytes = new byte[(int) f.length()];
   f.readFully(bytes);
   f.close();
   return new String(bytes);
}

private static void writeInstallationFile(File installation) throws IOException {
   FileOutputStream out = new FileOutputStream(installation);
   String id = UUID.randomUUID().toString();
   out.write(id.getBytes());
   out.close();
}

}

Você pode ver mais em https://github.com/MShoaibAkram/Android-Unique-Application-ID

Shoaib Akram
fonte