una samsung restringir que puedo pueden programa permisos para ocultar moviles lista fabrica desde desactivar datos crear como cero borrar bloquear app aplicaciones aplicacion android android-intent

samsung - que aplicaciones de fabrica puedo borrar de mi android



Cómo obtener una lista de las aplicaciones de Android instaladas y elegir una para ejecutar (17)

Hice una pregunta similar a esto a principios de esta semana, pero aún no entiendo cómo obtener una lista de todas las aplicaciones instaladas y luego elegir una para ejecutar.

He intentado:

Intent intent = new Intent(ACTION_MAIN); intent.addCategory(CATEGORY_LAUNCHER);

y esto solo muestra la aplicación que está preinstalada o puede ejecutar el tipo de intención ACTION_MAIN.

También sé que puedo usar PackageManager para obtener todas las aplicaciones instaladas, pero ¿cómo uso esto para ejecutar una aplicación específica?


Solución limpia que filtra con éxito las aplicaciones del sistema.

La idea detrás de esta solución es que la actividad principal de cada aplicación del sistema no tiene un icono de actividad personalizado . Este método me da un excelente resultado:

public static Set<PackageInfo> getInstalledApps(Context ctx) { final PackageManager packageManager = ctx.getPackageManager(); final List<PackageInfo> allInstalledPackages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA); final Set<PackageInfo> filteredPackages = new HashSet(); Drawable defaultActivityIcon = packageManager.getDefaultActivityIcon(); for(PackageInfo each : allInstalledPackages) { if(ctx.getPackageName().equals(each.packageName)) { continue; // skip own app } try { // add only apps with application icon Intent intentOfStartActivity = packageManager.getLaunchIntentForPackage(each.packageName); if(intentOfStartActivity == null) continue; Drawable applicationIcon = packageManager.getActivityIcon(intentOfStartActivity); if(applicationIcon != null && !defaultActivityIcon.equals(applicationIcon)) { filteredPackages.add(each); } } catch (PackageManager.NameNotFoundException e) { Log.i("MyTag", "Unknown package name " + each.packageName); } } return filteredPackages; }


@Jas: Ya no tengo ese código, pero he encontrado algo cercano. He hecho esto para buscar "componentes" de mi aplicación, son solo actividades con una categoría dada.

private List<String> getInstalledComponentList() { Intent componentSearchIntent = new Intent(); componentSearchIntent.addCategory(Constants.COMPONENTS_INTENT_CATEGORY); componentSearchIntent.setAction(Constants.COMPONENTS_INTENT_ACTION_DEFAULT); List<ResolveInfo> ril = getPackageManager().queryIntentActivities(componentSearchIntent, PackageManager.MATCH_DEFAULT_ONLY); List<String> componentList = new ArrayList<String>(); Log.d(LOG_TAG, "Search for installed components found " + ril.size() + " matches."); for (ResolveInfo ri : ril) { if (ri.activityInfo != null) { componentList.add(ri.activityInfo.packageName);// + ri.activityInfo.name); Log.d(LOG_TAG, "Found installed: " + componentList.get(componentList.size()-1)); } } return componentList; }

He comentado la parte donde se obtiene el nombre de la actividad, pero es bastante sencillo.


A continuación se muestra el código para obtener la lista de actividades / aplicaciones instaladas en Android:

Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);

Obtendrá todos los datos necesarios en ResolveInfo para iniciar una aplicación. Puedes consultar el javadoc de ResolveInfo here .


Aquí hay una forma más limpia utilizando el packageManager

final PackageManager pm = getPackageManager(); //get a list of installed apps. List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo : packages) { Log.d(TAG, "Installed package :" + packageInfo.packageName); Log.d(TAG, "Source dir : " + packageInfo.sourceDir); Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); } // the getLaunchIntentForPackage returns an intent that you can use with startActivity()

Más información aquí http://qtcstation.com/2011/02/how-to-launch-another-app-from-your-app/


Aquí un buen ejemplo:

class PInfo { private String appname = ""; private String pname = ""; private String versionName = ""; private int versionCode = 0; private Drawable icon; private void prettyPrint() { Log.v(appname + "/t" + pname + "/t" + versionName + "/t" + versionCode); } } private ArrayList<PInfo> getPackages() { ArrayList<PInfo> apps = getInstalledApps(false); /* false = no system packages */ final int max = apps.size(); for (int i=0; i<max; i++) { apps.get(i).prettyPrint(); } return apps; } private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) { ArrayList<PInfo> res = new ArrayList<PInfo>(); List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); for(int i=0;i<packs.size();i++) { PackageInfo p = packs.get(i); if ((!getSysPackages) && (p.versionName == null)) { continue ; } PInfo newInfo = new PInfo(); newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString(); newInfo.pname = p.packageName; newInfo.versionName = p.versionName; newInfo.versionCode = p.versionCode; newInfo.icon = p.applicationInfo.loadIcon(getPackageManager()); res.add(newInfo); } return res; }


Consigue todas las aplicaciones:

PackageManager pm = getContext().getPackageManager(); List<ApplicationInfo> apps = pm.getInstalledApplications(0);

Compruebe si la aplicación instalada luego abra:

if((app.flags & (ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_SYSTEM)) > 0) { String app_package = app.packageName; Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(app_package); context.startActivity(launchIntent);


Otra forma de filtrar en las aplicaciones del sistema (funciona con el ejemplo anterior):

/** * Return whether the given PackgeInfo represents a system package or not. * User-installed packages (Market or otherwise) should not be denoted as * system packages. * * @param pkgInfo * @return */ private boolean isSystemPackage(PackageInfo pkgInfo) { return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0); }


Para filtrar en aplicaciones basadas en sytem:

private boolean isSystemPackage(ResolveInfo ri) { return (ri.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; }


Para obtener todas las aplicaciones instaladas puedes usar Package Manager.

List<PackageInfo> apps = getPackageManager().getInstalledPackages(0);

Para ejecutar puedes usar el nombre del paquete

Intent launchApp = getPackageManager().getLaunchIntentForPackage(“package name”) startActivity(launchApp);

Para más detalles, puedes leer este blog http://codebucket.co.in/android-get-list-of-all-installed-apps/


Puede encontrar la lista de aplicaciones instaladas en el dispositivo Android utilizando el siguiente código, "packageInfo" Contiene información de la aplicación instalada en el dispositivo. podemos recuperar Intent para la aplicación instalada desde el objeto packageinfo y, mediante el uso de startactivity (intent), podemos iniciar la aplicación. depende de usted cómo organizar la interfaz de usuario, ya sea Listview o Gridview. por lo tanto, al hacer clic en un evento basado en la posición, puede recuperar el objeto de intento e iniciar el intento de actividad.

final PackageManager pm = getPackageManager(); List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo : packages) { if(pm.getLaunchIntentForPackage(packageInfo.packageName)!= null && !pm.getLaunchIntentForPackage(packageInfo.packageName).equals("")) { System.out.println("Package Name :" + packageInfo.packageName); System.out.println("Launch Intent For Package :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); System.out.println("Application Label :" + pm.getApplicationLabel(packageInfo)); System.out.println("Application Label :" + pm.getApplicationIcon(packageInfo.packageName).toString()); System.out.println("i : "+i); /*if(i==2) { startActivity(pm.getLaunchIntentForPackage(packageInfo.packageName)); break; }*/ i++; } }


Si hay varios lanzadores en un paquete anterior, el código tiene un problema. Por ejemplo: en LG Optimus Facebook para LG, MySpace para LG, Twitter para LG contiene un nombre de paquete SNS y si usa el SNS anterior se repetirá. Después de horas de investigación vine con el siguiente código. Parece funcionar bien.

private List<String> getInstalledComponentList() throws NameNotFoundException { final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> ril = getPackageManager().queryIntentActivities(mainIntent, 0); List<String> componentList = new ArrayList<String>(); String name = null; for (ResolveInfo ri : ril) { if (ri.activityInfo != null) { Resources res = getPackageManager().getResourcesForApplication(ri.activityInfo.applicationInfo); if (ri.activityInfo.labelRes != 0) { name = res.getString(ri.activityInfo.labelRes); } else { name = ri.activityInfo.applicationInfo.loadLabel( getPackageManager()).toString(); } componentList.add(name); } } return componentList; }


Tenía un requisito para filtrar las aplicaciones del sistema que el usuario realmente no usa (por ejemplo, "com.qualcomm.service", "servicios de actualización", etc.). En última instancia, he añadido otra condición para filtrar hacia abajo la lista de aplicaciones. Acabo de comprobar si la aplicación tiene "intención del lanzador".

Entonces, el código resultante se parece a ...

PackageManager pm = getPackageManager(); List<ApplicationInfo> apps = pm.getInstalledApplications(PackageManager.GET_GIDS); for (ApplicationInfo app : apps) { if(pm.getLaunchIntentForPackage(app.packageName) != null) { // apps with launcher intent if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { // updated system apps } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { // system apps } else { // user installed apps } appsList.add(app); } }


Tengo otra solución:

ArrayList<AppInfo> myAppsToUpdate; // How to get the system and the user apps. public ArrayList<AppInfo> getAppsToUpdate() { PackageManager pm = App.getContext().getPackageManager(); List<ApplicationInfo> installedApps = pm.getInstalledApplications(0); myAppsToUpdate = new ArrayList<AppInfo>(); for (ApplicationInfo aInfo : installedApps) { if ((aInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { // System apps } else { // Users apps AppInfo appInfo = new AppInfo(); appInfo.setAppName(aInfo.loadLabel(pm).toString()); appInfo.setPackageName(aInfo.packageName); appInfo.setLaunchActivity(pm.getLaunchIntentForPackage(aInfo.packageName).toString()); try { PackageInfo info = pm.getPackageInfo(aInfo.packageName, 0); appInfo.setVersionName(info.versionName.toString()); appInfo.setVersionCode("" + info.versionCode); myAppsToUpdate.add(appInfo); } catch (NameNotFoundException e) { Log.e("ERROR", "we could not get the user''s apps"); } } } return myAppsToUpdate; }


puedes usar esto:

PackageManager pm = getApplicationContext().getPackageManager(); List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); for (final ResolveInfo app : activityList) { if ((app.activityInfo.name).contains("facebook")) { // facebook } if ((app.activityInfo.name).contains("android.gm")) { // gmail } if ((app.activityInfo.name).contains("mms")) { // android messaging app } if ((app.activityInfo.name).contains("com.android.bluetooth")) { // android bluetooth } }


Obtención de la lista de aplicaciones instaladas que no son del sistema

public static void installedApps() { List<PackageInfo> packList = getPackageManager().getInstalledPackages(0); for (int i=0; i < packList.size(); i++) { PackageInfo packInfo = packList.get(i); if ( (packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { String appName = packInfo.applicationInfo.loadLabel(getPackageManager()).toString(); Log.e("App № " + Integer.toString(i), appName); } } }


private static boolean isThisASystemPackage(Context context, PackageInfo packageInfo ) { try { PackageInfo sys = context.getPackageManager().getPackageInfo("android", PackageManager.GET_SIGNATURES); return (packageInfo != null && packageInfo.signatures != null && sys.signatures[0].equals(packageInfo.signatures[0])); } catch (NameNotFoundException e) { return false; } }


public static List<ApplicationInfo> getApplications(Context context) { return context.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); }