AndroidアプリケーションIDを取得する方法


92

Androidでは、プログラムで(または他の方法で)アプリケーションのIDを取得するにはどうすればよいですか。また、そのIDを使用して他のアプリケーションと通信するにはどうすればよいですか。

回答:


143

あなたがapplicationIdgradleで定義された値を探しているなら、あなたは単に使うことができます

BuildConfig.APPLICATION_ID 

29
これは、Androidライブラリを作成している場合はそれほど有用ではありません
Simon Featherstone

これを使用して、EspressoテストでapplicationIdを取得します。private val targetContext = instrumentation.getTargetContext()private val applictionId = targetContext.getPackageName();
a_subscriber

@SimonFeatherstoneあなたはモジュールからそれを行う方法を見つけたことがありますか?
Mihai Fischer

@MihaiFischerでは、モジュール/ライブラリを初期化してそのような情報を渡すための関数を作成する必要があります。
Simon Featherstone

48

よるならばapplication id、あなたが参照しているpackage name、あなたは、この方法を使用することができますContext::getPackageNamehttp://を://developer.android.com/reference/android/content/Context.html#getPackageName%28%29 HTTP)。

他のアプリケーションと通信したい場合、複数の方法があります:

  1. 別のアプリケーションのアクティビティを開始し、「Intent」の「Extras」でデータを送信します
  2. 特定のアクション/カテゴリでブロードキャストを送信し、エクストラでデータを送信します
  3. 構造化データを共有するだけの場合は、コンテンツプロバイダーを使用します
  4. 他のアプリケーションをバックグラウンドで継続的に実行する必要がある場合は、サーバーを使用してサービスに「バインド」します。

正確な要件を詳しく説明できる場合は、コミュニティがよりよい支援を提供できます。


アプリのリストを表示する必要があり、リストアダプターが必要とするのと同じように、IDを整数として設定する必要がある場合はどうなりますか?インストール時間を使用することもできますが、それは長いタイプです。それをintにキャストしてもまだ役に立ちますか?
Android開発者

4
build.gradleで設定した場合、パッケージ名は必ずしもapplicationIdではありません。
Jemshit Iskenderov 2017

2
実際にContext.getPackageName() 、パッケージ名ではなくアプリケーションIDを返します(ただし、通常は同じです)。メソッドのやや紛らわしい名前はレガシーです。ソース:developer.android.com/studio/build/application-id
LoPoBo

Context :: getPackageNameは、kotlinを使用している場合は機能せず、「関数getPackageName(Kotlinリフレクションは利用できません)」を返します
Derek Zhu

6

どの「アプリケーションID」を参照しているのかはわかりませんが、アプリケーションの一意の識別子として使用できます。

現在のアクティビティのgetApplication()。getPackageName()メソッド


2
インストールされている各アプリケーションには一意のIDがあります。他のアプリケーションからアプリケーションの一意のIDを取得することは可能ですか
arams

3
ですgetApplicationContext().getPackageName()よね?
superarts.org 2016

リリースやデバッグなどのビルドタイプがあり、メインアプリケーションと区別するために「debug」などのサフィックスを追加したとします。この場合、getpackageName()はoriginalpackagename.debug
Aman Verma



1

それ以外の場合は、アプリケーションが実行されているプロセスのIDを取得できます。

final static int android.os.Process.myPid()
このプロセスの識別子を返します。これは、killProcess(int)およびsendSignal(int、int)で使用できます。


1

アプリ/インストールIDが何のために必要かはわかりませんが、Android開発者によるすばらしい記事で既存の可能性を確認できます。

総括する:

  • UUID.randomUUID() インストール後にアプリを初めて実行したときにIDを作成し、その後簡単に取得するため
  • TelephonyManager.getDeviceId() 実際のデバイス識別子
  • Settings.Secure.ANDROID_ID 比較的最近のデバイス

0

PackageInfo.sharedUserIdフィールドは、ユーザIDが表示されますマニフェストに割り当てられているが

2つのアプリケーションが同じuserIdを持つようにして、互いのデータを表示して同じプロセスで実行できるようにする場合は、マニフェストで同じuserIdを割り当てます。

android:sharedUserId="string"

同じsharedUserIdを持つ2つのパッケージも同じ署名を持つ必要があります。

また、ここを読んで、正しい方向に向けて調整することをお勧めします。


2つの異なるアプリケーションが同じパッケージ名を使用していることを意味します。アプリケーションはデータを共有できますか?...
arams

いいえ。2つのアプリケーションが同じshareUserIdを持ち、同じ署名で署名されている場合、データを共有できます。パッケージ名は問題ではありません。
ウィル

0

目的が他のアプリケーションとのデータ通信である場合は、IntentのsendBroadcastメソッドを使用します。


0

新しい** Gradleビルドシステムを使用している場合getPackageName、パッケージ名ではなく、アプリケーションIDが奇妙に返されます。だからMasterGauravの答えは正しいですが、彼は++で始める必要はありません

アプリケーションIDの場合、パッケージ名を参照しています...

違いの詳細については、こちらをご覧ください

**現時点ではそれほど新しくない

++私は彼の答えが2011年に完全に理解できたことを理解


0

AndroidアプリESファイルエクスプローラーは、ビットワーデンに役立つユーザーアプリセクションにAndroidパッケージ名を表示します。Bitwardenはこれを「AndroidアプリケーションパッケージID(またはパッケージ名)」と呼びます。


0

インストールを追跡するには、たとえば、UUIDを識別子として使用し、アプリがインストール後に初めて実行されるときに新しいUUIDを作成するだけです。以下は、1つの静的メソッドInstallation.id(Context context)を持つ「Installation」という名前のクラスのスケッチです。さらに、インストール固有のデータを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();
}

}

Yonは、https://github.com/MShoaibAkram/Android-Unique-Application-IDで詳細を確認できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.