2011-04-14 18 views
13

¿Hay alguna manera de que pueda obtener el nombre de la aplicación, la versión de la aplicación y el ícono de la aplicación, porque el paquete que aún no está instalado? (Por alguna archivo APK en la tarjeta sd)Obtener el ícono del archivo APK, versión, nombre

+0

¿Pudo encontrar el número de la verión, si es así, puede por favor publicar su respuesta. –

Respuesta

6

puedo conseguir icono apk, versión, nombre utilizando getPackageArchiveInfo(archiveFilePath, flags) y getApplicationIcon (ApplicationInfo info)

+6

No funciona para aplicaciones que no están instaladas :(, solo devuelve el icono de la aplicación predeterminada. –

+1

respuesta correcta http: // stackoverflow.com/a/14313280/185022 –

5
// Install a known apk file from the SD-Card 
// or launch it if installed. 
// -hsigmond 

protected void runAppFromApkFileOnSdCard() { 

     final PackageManager pm = getActivity().getPackageManager(); 
     String apkFileName  = "application_name.apk"; 
     String fullPath   = "/sdcard/"+apkFileName; 
     PackageInfo packageInfo = pm.getPackageArchiveInfo(fullPath, 0); 
     Intent intent   = pm.getLaunchIntentForPackage(packageInfo.packageName); 

     if(intent == null){ 
      File file = new File(fullPath); 
      intent  = new Intent(); 
      intent.setAction(Intent.ACTION_VIEW); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.setDataAndType(Uri.fromFile(file), 
      "application/vnd.android.package-archive"); 
     } 
     startActivity(intent); 
    } 

Uso:

packageInfo.applicationInfo.['name','icon','logo'] etc. 

Ejemplo del icono:

Drawable icon = packageInfo.applicationInfo.loadIcon(getActivity().getPackageManager()); 
+0

Intenté esto pero siempre el packageInfo es nulo. me faltan los permisos? – 1HaKr

+0

funciona para mí en Samsung Galaxy Tab 8.9, versión Android 3.2. packageInfo NO es nulo, la intención es nula si la aplicación aún no está instalada. – giacatho

13

Lo he intentado:

PackageInfo info = getPackageManager().getPackageArchiveInfo(fullPath, 0); 
ApplicationInfo appinfo = info.applicationInfo; 
label = getPackageManager().getApplicationLabel(appinfo).toString(); 
img = getPackageManager().getApplicationIcon(info.packageName); 

pero si el apk no se installated no funcionar este código

0

Como ya habrán descubierto, PackageManager sólo será útil si la aplicación está instalada.

para resolver su problema de conseguir la información sin necesidad de instalar la aplicación utilice el extractor APK, consulte: http://code.google.com/p/apk-extractor/downloads/detail?name=APK-Extractor-src-1.0.zip&can=2&q=

Este proyecto es un intento de desarrollar un programa de análisis a disposición del público que puede analizar XML binario de Android . AAPT (Android Asset Packaging Tool) codifica/descodifica recursos XML en el formato XML propio de Google . Es una creencia común que este es un formato genérico WBXML y cualquier analizador capaz de WBXML puede analizarlo. Pero esto no es cierto.

Si está planeando explorar el XML Binario de Android, mi base de código puede ayudarle a comenzar y construir el servicio en la parte superior.

Versión 1.0- es capaz de analizar Manifiesto de Android, diseños XML, etc. y convertir DEX/ODEX en CLASE, que puede abrirse con cualquier compilador .

su blog está aquí: http://prasanta-paul.blogspot.com/2012/03/android-apk-extractor.html

53

yo pasamos más horas de lo que jamás lo admitirá en busca de la solución a este .. y lo encontraron! :) :)

Después de vagar en esta referencia: http://code.google.com/p/android/issues/detail?id=9151 descubrí el truco para obtener el icono y el nombre (etiqueta, que es) a partir de archivos .apk que no se han instalado.

espero que no sea demasiado tarde para ayudar a otros con esto:

String APKFilePath = "mnt/sdcard/myapkfile.apk"; //For example... 
PackageManager pm = getPackageManager(); 
PackageInfo pi = pm.getPackageArchiveInfo(APKFilePath, 0); 

// the secret are these two lines.... 
pi.applicationInfo.sourceDir  = APKFilePath; 
pi.applicationInfo.publicSourceDir = APKFilePath; 
// 

Drawable APKicon = pi.applicationInfo.loadIcon(pm); 
String AppName = (String)pi.applicationInfo.loadLabel(pm); 

Después de examen de la luz de esto, parece que funciona ... ¡menos mal.

+0

¡Genial, funciona! – lorenzoff

+0

¡Genial! Esto funciona para mi. Gracias. – posaidong

+0

Debe ser obligatorio Debe ser el mercado como respuesta CORRECTA: D ayudó mucho gracias :) –

Cuestiones relacionadas