2011-10-11 8 views

Respuesta

18

Lo hice en mi aplicación que requiere la aplicación del escáner zxing para ser instalado. Le harán falta dentro de su onclick o ontouch:

try{ 
    Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
    intent.setPackage("com.google.zxing.client.android"); 
    startActivityForResult(intent, 0); 
} catch (Exception e) { 
    createAlert("Barcode Scanner not installed!", "This application uses " + 
    "the open source barcode scanner by ZXing Team, you need to install " + 
    "this before you can use this software!", true); 
} 

que exige

public void createAlert(String title, String message, Boolean button) { 
    // http://androidideasblog.blogspot.com/2010/02/how-to-add-messagebox-in-android.html 
    AlertDialog alertDialog; 
    alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle(title); 
    alertDialog.setMessage(message); 
    if ((button == true)) { 
     alertDialog.setButton("Download Now", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       Intent browserIntent = new Intent(
        Intent.ACTION_VIEW, 
        Uri.parse("market://search?q=pname:com.google.zxing.client.android")); 
       startActivity(browserIntent); 
      } 
     }); 
    } 
    alertDialog.show(); 
} 

A continuación, después de clasificar a cabo todo ese código a cabo me di cuenta de que pidió que sea instalado en el mismo tiempo que su aplicación. No estoy seguro si debería publicar este código, pero puede ser útil

+3

No creo que solo deba atrapar "Excepción" que es un poco amplia, captar la instancia de Excepción real probablemente sea mejor. – AGrunewald

+1

@AGrunewald Estoy completamente de acuerdo! :) A veces soy excepcionalmente perezosa – TerryProbert

5

inicio de esta:

Intent mediaIntent = new Intent("com.example.intent.action.NAME"); 
// add needed categories 
List<ResolveInfo> listResolveInfo = getPackageManager().queryIntentServices(mediaIntent, 0); 
if (listResolveInfo.size() != 0) { 
    //normal behavior 
} else { 
    //install what you need 
} 

te dan ejemplo de consulta de los servicios. Si desea verificar actividades, llamará a queryIntentActivities().

8

Respuesta corta: No, no puede instalar automáticamente otras aplicaciones como dependencias.

Respuesta larga:

Android Market no permite que se declara otras aplicaciones para instalar como una dependencia. Como sistema, Market parece estar diseñado para instalaciones de aplicaciones únicas, no para gráficos de megadependencias de estilo de distro de Linux.

En tiempo de ejecución, se puede prueba para las aplicaciones instaladas y despejar el usuario a través del Mercado de ser así. Vea las técnicas sugeridas por @QuickNick (prueba si una aplicación está instalada) y @TerryProbert (punting to market) si eso es lo que desea.

Su mejor opción es probablemente diseñar su aplicación para degradar con gracia si las dependencias no están disponibles, y sugerir (o insistir) que se dirijan al mercado para instalarlas.

2

Esto es lo que utilizo para devolver la primera actividad misión que existe:

   try { 
       Class<?> missionClass = Class.forName(mPackageName+".Mission"+mission); 
         Method missionDescription; 
         missionDescription = missionClass.getMethod("missionDescription"); 
         mMissionDescription = (String) missionDescription.invoke(null); 
         if (mMissionDescription.length() > 0) { 
          nextMission = mission; 
          break; 
         } 
        } catch (Exception e) { 
         //DEBUG*/Log.v(this.getClass().getName(), "onResume: Mission no "+mission+" not found: "+e.getMessage()); 
        } 

Cada misión se lleva a cabo en una clase separada, derivado de una clase base Misión. Las clases derivadas se llaman Mission1, Mission24, etc.

No se definen todas las misiones.

La clase base tiene una clase de descripción de misión abstracta que devuelve una cadena que describe la misión.

Este código está dentro de un bucle así que prueba la misión = 1 a 99, tratando de llamar a missionDescription. Se devuelve cuando se devuelve la Descripción de la primera misión encontrada.

Cuestiones relacionadas