¿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