패키지 이름에서 애플리케이션 이름 가져 오기


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

3
그것의 반환 나 항상 알 수없는 내가 alrady 패키지 이름이 그냥 패키지 이름에서 이름을 알고 싶어
nida

전 세계 수신기에서 이것을 사용할 때 작동하지 않습니다
지브 Kesten

PACKAGE_REMOVED 이후에는 패키지의 applicationInfo를 가져올 수 없습니다.
John61590

완벽한 하나 .. 그냥 복사 붙여 넣기 .. 작업이 완료됩니다. 감사합니다.
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패키지 이름으로.

당신은 어디 에서 활동을 사용하고 조각에 대해 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

그 이후에 추가 된 새로운 패키지의 이벤트를받을 수있을 것 같습니다. 그 패키지에 대한 모든 관련 정보를 얻을 수있는 매우 간단한 개념이 애플리케이션 이름이므로 여기에 개념이 있습니다.

-> 장치 패키지 관리자에는 관련된 모든 정보가 있으므로 패키지 이름과 관련된 모든 정보를 제공하는 개체를 만드십시오.

-> 인 텐트가 "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

-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.