¿Cómo puedo identificar que la aplicación es móvil a sdcard?

Quiero identificar la lista de aplicaciones que están instaladas en la memoria del teléfono y móviles a sdcard. Estoy usando la siguiente función para obtener la lista de aplicaciones instaladas.

He comprobado el código fuente de Android para InstalledAppDetails pero no puedo obtener la solución.

Advance gracias

private List<App> loadInstalledApps(boolean includeSysApps) { List<App> apps = new ArrayList<App>(); // the package manager contains the information about all installed apps PackageManager packageManager = getPackageManager(); List<PackageInfo> packs = packageManager.getInstalledPackages(0); //PackageManager.GET_META_DATA for(int i = 0; i < packs.size(); i++) { PackageInfo p = packs.get(i); ApplicationInfo a = p.applicationInfo; // skip system apps if they shall not be included if ((!includeSysApps) && ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1)) { continue; } App app = new App(); app.setTitle(p.applicationInfo.loadLabel(packageManager).toString()); app.setPackageName(p.packageName); app.setVersionName(p.versionName); app.setVersionCode(p.versionCode); app.setInstallDir(p.applicationInfo.sourceDir); app.setInstallSize(calculateSize(app.getInstallDir())); CharSequence description = p.applicationInfo.loadDescription(packageManager); app.setDescription(description != null ? description.toString() : ""); if(app.getInstallDir().contains("/mnt")) { //app on sdcard apps.add(app); } else { //app on phone memory apps.add(app); } } return apps; } 

La ubicación de la instalación de la aplicación se especifica en AndroidManifest.xml de tu aplicación. Echa un vistazo aquí para más información. En breve:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" ... > 

o

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" ... > 

Donde auto significa que la aplicación se puede instalar en el dispositivo externo, pero no tiene una preferencia; Y preferExternal significa que la aplicación se instalará en un dispositivo externo cuando sea posible

Recuerda eso…

Si no declara este atributo, su aplicación se instalará únicamente en el almacenamiento interno y no se podrá mover al almacenamiento externo.

Por lo tanto, la pregunta ahora es cómo obtener el archivo androidManifest.xml de la aplicación. Bueno, se puede tomar desde el APK (si no se eliminan después de instalado). Para este problema, eche un vistazo a esta publicación: Cómo analizar el archivo AndroidManifest.xml dentro de un paquete .apk

Por último, un gran tema sobre el análisis del xml se encuentra en este post, también. Acceso al atributo de manifiesto android: installLocation

Saludos, Aldo

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.