パッケージ名からアプリケーション名を取得する


84

アプリケーションパッケージ名からアプリケーション名を取得したい。誰かが私がこれをどうやって手に入れることができるか教えてください。

public class AppInstalledListener extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        String action = intent.getAction();
        if(action.equals("android.intent.action.PACKAGE_ADDED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REMOVED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REPLACED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
    }
}

回答:


196

PackageManagerクラスを使用してApplicationInfo以下を取得できます。

final PackageManager pm = getApplicationContext().getPackageManager();
ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo( this.getPackageName(), 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");

これ<application>により、マニフェストのタグで定義されているアプリケーション名が返されます。


1
それは最高です。Xionに感謝します。:D
drulabs 2012年

3
私はちょうどパッケージ名から名前を知りたいパッケージ名を持つalradyその戻って私の未知のすべての時間
ニダ

グローバルレシーバーでこれを使用すると、これは機能しません
Ziv Kesten 2015年

PACKAGE_REMOVEDの後にパッケージのapplicationInfoを取得することはできません。
John615 9018

完璧なもの..コピー&ペースト..作業を完了します。ありがとうございました。
ABHIMANGAL MS

37

これを試して

final String packageName = "my.application.package"
PackageManager packageManager= getApplicationContext().getPackageManager();
String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA));

packageNameパッケージのフルネームに置き換えます。

アクティビティのwhereとフラグメントのgetActivity()を使用してpackageNameを取得できますmContext.getPackageName()mContext = yourActivityName.this


15
 public static String getAppNameFromPkgName(Context context, String Packagename) {
    try {
        PackageManager packageManager = context.getPackageManager();
        ApplicationInfo info = packageManager.getApplicationInfo(Packagename, PackageManager.GET_META_DATA);
        String appName = (String) packageManager.getApplicationLabel(info);
        return appName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return "";
    }
}

3

その後、新しいパッケージが追加されたというイベントを受け取ることができるようです。そのような情報の1つがアプリケーション名であるなど、そのパッケージに関連するすべての情報を取得するための非常に単純な概念です。ここに概念があります。

->デバイスパッケージマネージャーにはそれに関連するすべての情報があるので、パッケージ名に関連するすべての情報を提供するオブジェクトを作成するだけです。

->インテントは「package:real_package_name」を提供することも覚えておく必要があります。そのため、最初に、spilling(私が使用)またはStringの他の単純な実装によって実際の名前を取得する必要があります。

->これがあなたが望むものを手に入れることを願うコードです私はまたあなたがアプリ名、アプリアイコン、アプリバージョン、アプリバージョンコードなどを得る方法についての情報を与えています.....

    public class NewAppReciver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("android.intent.action.PACKAGE_ADDED")){
    String[] a=intent.getData().toString().split(":");
    String packageName=a[a.length-1];

    List<PackageInfo> packageInfoList =          context.getPackageManager().getInstalledPackages(0);
    for (int i = 0; i < packageInfoList.size(); i++) {
        PackageInfo packageInfo = packageInfoList.get(i);
        if(packageInfo.packageName.equals(packageName)){
            String appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
            String appVersion = packageInfo.versionName;
            int appVerCode = packageInfo.versionCode;
            Drawable app_icon = packageInfo.applicationInfo.loadIcon(context.getPackageManager());
             }
         }
      }
   }    
}

ただし、アプリケーションのアンインストール時には、アンインストール時にのみパッケージ名を取得できます。他のすべての情報はシステムによって削除されます。


intent.getData()。toString()は行く方法ではなく、インテント内のデータは構造化されています。
Olaf Achthoven 2016年

-2
PackageManager pm = getPackageManager();

IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");

Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName());

ComponentName[] components = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher.Launcher"), component};

pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.