2011-06-04 13 views
14

Estoy trabajando en una aplicación en la que enumero las aplicaciones instaladas con el administrador de paquetes. Puedo hacer clic en el nombre del paquete del elemento, pero me gustaría iniciar la pantalla de detalles en función del paquete. Entonces, por ejemplo, si se seleccionó el navegador Dolphin en la lista, entonces vería la siguiente imagen. ¿Cómo puedo hacer esto?Página de detalle de aplicaciones de inicio de Android

enter image description here

solución final establecer su destino como Gingerbread API de nivel 9 y establecer sus minutos como el nivel de API 7

final int apiLevel = Build.VERSION.SDK_INT; 
Intent intent = new Intent(); 
if (apiLevel >= 9) { 
    //TODO get working on gb 
    //Toast.makeText(SDMove.this, "Gingerbread Not Currently Supported", Toast.LENGTH_LONG).show(); 
    startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, 
          Uri.parse("package:" + pli.pkg.packageName))); 
} else { 
    final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName"); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); 
    intent.putExtra(appPkgName, pli.pkg.packageName); 
    startActivity(intent); 
} 

Respuesta

10

Aquí está una aplicación que funciona completamente con un ListActivity que enumera todas las aplicaciones instaladas. Cuando hace clic en un nombre de paquete, abre los detalles de la aplicación.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Intent for getting installed apps. 
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

    // Get installed apps 
    List<ResolveInfo> appList = this.getPackageManager().queryIntentActivities(mainIntent, 0); 

    // Make new list for package names and fill the list. 
    List<String> packageNameList = new ArrayList<String>(); 
    for (ResolveInfo resolveInfo : appList) { 
     packageNameList.add(resolveInfo.activityInfo.packageName); 
    } 

    // Set the list adapter. 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.simple, packageNameList)); 
} 

public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    // Get the TextView that was clicked. 
    TextView view = (TextView)v; 

    // Get the text from the TextView. 
    String packageName = (String)view.getText(); 

    // Open AppDetails for the selected package. 
    showInstalledAppDetails(packageName); 
} 

public void showInstalledAppDetails(String packageName) { 
    final int apiLevel = Build.VERSION.SDK_INT; 
    Intent intent = new Intent(); 

    if (apiLevel >= 9) { 
     intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
     intent.setData(Uri.parse("package:" + packageName)); 
    } else { 
     final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName"); 

     intent.setAction(Intent.ACTION_VIEW); 
     intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); 
     intent.putExtra(appPkgName, packageName); 
    } 

    // Start Activity 
    startActivity(intent); 
} 

Recuerde que debe tener main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
    <TextView android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="No apps installed"/> 
</LinearLayout> 

y simple.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</TextView> 

en su carpeta diseño. Espero que esto funcione :)

+0

¿Hay algún permiso manifiesto o algo para esto? sigo consiguiendo que la fuerza se cierre con todo lo que intento, solo intenté con tu método configurarlo en algo simple como el reloj de escritorio. Puse su método y luego ejecuté showInstalledAppDetails ("com.android.deskclock"); pero no importa lo que intento, la fuerza se cierra. Estoy ejecutando project elite gb en un rooteado d1 pero la aplicación he establecido en 2.2 como mi min SDK, pero no tengo idea de por qué obligo a cerrar cada vez – GFlam

+0

Lo tengo para ejecutar en mi 2.2 emulador , pero cuando probé "com.android.deskclock" recibí "Excepción al recuperar paquete: com.android.deskclock". Pruebe con otra aplicación, como "com.android.settings", que funcionó en el emulador. Es muy importante que el nombre del paquete sea el correcto :) Si no logra que funcione, puede publicar la pila de LogCat. – khellang

+0

Sí, acabo de hacer un nuevo proyecto con 2.3 como objetivo, esta fuerza de método se cierra pero el código siguiente funcionaba con 2.3, como dijiste, pero lo necesito en 2.2, ya que estoy escribiendo esta aplicación para una rom 2.2. De todos modos la publicación de la Logcat en un segundo no vi nada realmente allí, pero tal vez se – GFlam

9

Prueba esto:

startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:your.package.here"))); 

y reemplazar "paquete : your.package.here "con el paquete real que desea ver ...

+0

Esto es solo 2.3 ... – khellang

+0

trabajando en una aplicación de 2.2 nada por eso? – GFlam

+0

Esta respuesta es mucho mejor :) –

Cuestiones relacionadas