ottenere il nome dell'applicazione dal nome del pacchetto


84

Voglio ottenere il nome dell'applicazione dal nome del pacchetto dell'applicazione. Qualcuno per favore mi mostri come posso ottenerlo.

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

Risposte:


198

Puoi usare la PackageManagerclasse per ottenere 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)");

Ciò restituirebbe il nome dell'applicazione come definito nel <application>tag del suo manifest.


1
è perfetto. Lo cercavo da ore, grazie Xion. : D
drulabs

3
mi sta restituendo sconosciuto tutto il tempo in cui ho già il nome del pacchetto voglio solo sapere il nome dal nome del pacchetto
nida

Questo non funziona quando lo uso nel ricevitore globale
Ziv Kesten

non è possibile ottenere applicationInfo di un pacchetto dopo PACKAGE_REMOVED.
John61590

perfetto .. copia e incolla .. fa il lavoro. grazie.
ABHIMANGAL MS

37

Prova questo

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

e sostituisci packageNamecon il nome completo del pacchetto.

puoi ottenere packageName usando mContext.getPackageName()where mContext = yourActivityName.thisper Activity e getActivity () per fragment.


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

Sembra che tu sia in grado di ricevere l'evento di un nuovo pacchetto aggiunto dopo di ciòèun concetto molto semplice ottenere tutte le informazioni rilevanti su quel pacchetto come se una di queste informazioni sia il nome dell'applicazione quindi ecco il concetto

-> il gestore dei pacchetti del tuo dispositivo ha tutte le informazioni ad esso correlate, quindi creane un oggetto che ti darà tutte le informazioni relative al nome del pacchetto.

-> Dovresti anche ricordare che l'intento ti dà "package: real_package_name" quindi prima devi prima ottenere il vero nome rovesciando (ho usato) o da qualsiasi altra semplice implementazione di String

-> Ecco il codice che spero che tu ottenga ciò che desideri. Fornisco anche informazioni su come ottenere il nome dell'app, l'icona dell'app, la versione dell'app, il codice della versione dell'app ecc .....

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

Ma al momento della disinstallazione dell'applicazione è possibile ottenere solo il nome del pacchetto poiché nell'installazione Un tutte le altre informazioni vengono rimosse dal sistema.


intent.getData (). toString () non è la strada da percorrere, i dati nell'intento sono strutturati.
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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.