2011-04-30 3 views
68

응용 프로그램 패키지 이름에서 응용 프로그램 이름을 가져오고 싶습니다. 누군가 내가 이걸 어떻게 얻을 수 있는지 보여줘.패키지 이름에서 응용 프로그램 이름을 얻으십시오.

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()); 
     } 
    } 
} 

답변

174

당신은 ApplicationInfo를 얻기 위해 PackageManager 클래스를 사용할 수 있습니다 : 매니페스트의 <application> 태그에 정의 된

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)"); 

이 응용 프로그램 이름을 반환합니다.

+1

완벽합니다. 몇 시간 동안 그것을 찾고 있었고, Xion에게 감사드립니다. : D – drulabs

+3

그것의 알 수없는 반환 모든 시간 내가 alrady 패키지 이름을 가지고 그냥 패키지 이름에서 이름을 알고 싶어요 – nida

+0

이것은 글로벌 수신기에서 이것을 사용할 때 작동하지 않습니다 –

-1
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); 
3

하나 개의 정보 등이 패키지에 대한 모든 관련 정보를 얻을 수는 아주 간단한 개념은 이렇게 여기에서 응용 프로그램 이름입니다 개념이다 후 추가 된 새로운 패키지의 이벤트를 수신 할 수있는 것 같다

-> 장치 패키지 관리자는 패키지 정보와 관련된 모든 정보를 가지고 있으므로 패키지 이름과 관련된 모든 정보를 제공 할 수 있습니다.

-> 당신은 또한 의도는 당신에게 "패키지 : real_package_name를"주는 것을 기억해야한다 먼저

(내가 사용) 유출 또는 문자열

의 다른 간단한 구현하여 실제 이름을 얻을 수있다 그래서 첫째 -> 다음 .....

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()); 
      } 
     } 
     } 
    }  
} 

그러나시의 코드는 당신이 나는 또한 당신이 응용 프로그램 이름, 응용 프로그램 아이콘, 응용 프로그램 버전, 앱 버전 코드 등을 얻을 수있는 방법에 대한 정보를 제공하고있어 원하는 것을 얻을 희망입니다 응용 프로그램 설치 제거시 패키지 이름 만 얻을 수 있습니다. 다른 모든 정보는 시스템에서 제거됩니다.

+0

intent.getData(). toString()은 방법이 아닙니다. 이동하려면 의도의 데이터가 구조화되어야합니다. –

21

는 패키지 이름이

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

및 교체 packageName보십시오.

당신은 조각에 대한 mContext.getPackageName() 경우 활동에 대한 mContext = yourActivityName.thisgetActivity()를 사용하여 여기서 packageName를 얻을 수 있습니다.

+1

감사합니다 @Nepster 정말 도움이됩니다 :) –

1
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 ""; 
    } 
} 
관련 문제