¿Cómo hacer una aplicación de Android que depende de otra aplicación?
Si creo una aplicación que depende de otra aplicación o aplicaciones (por ejemplo: las aplicaciones de Facebook y Twitter), aún no están instaladas, ¿existe un método para comprobar esas dependencias e instalarlas al mismo tiempo que mi propia aplicación?
- Android "ya se ha añadido a la salida" error para jar en una dependencia de proyecto
- ¿Cómo hacer lo contrario de atributo de preferencia android: dependencia?
- ¿Cuáles son las dependencias de Google Maps v2?
- Eliminar el permiso WAKE_LOCK no deseado fusionado de la biblioteca
- Biblioteca .jar de Android dentro de la biblioteca .jar - Dependencias anidadas
- Configuración de dependencias de Android
- Servicio externo de Android desde una biblioteca (AAR, no Shared Service)
- Proyecto de biblioteca android: R.id no se puede resolver o no es un campo
- Controles de dependencia estrictos de Android en SDK 17
- No se puede resolver el símbolo: 'HttpClient', incluso después de agregar la dependencia
- Error de dependencia de CheckBoxPreference no encontrado
- Error al agregar dependencia en android
- Dependencia de ListPreference
Hice esto en mi aplicación que requiere la aplicación de escáner zxing para ser instalado. Usted querrá esto 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 llama
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(); }
Luego, después de solucionar todo ese código, me doy cuenta de que pediste que se instalara al mismo tiempo que tu aplicación . No estoy seguro si debo publicar este código, pero puede ser útil
Respuesta corta: No, no puede instalar automáticamente otras aplicaciones como dependencias.
Respuesta más larga:
Android Market no le permite declarar otras aplicaciones para instalar como una dependencia. Como un sistema, Market parece estar diseñado para instalaciones de una sola aplicación – no Linux distro estilo mega gráficos de dependencia.
En tiempo de ejecución , puede probar las aplicaciones instaladas y enviar a su usuario al mercado si es así. Vea las técnicas sugeridas por @QuickNick (prueba si una aplicación está instalada) y @TerryProbert (punting al mercado) si eso es lo que quiere.
Su mejor apuesta es probablemente diseñar su aplicación para degradar graciosamente si las dependencias no están disponibles, y sugerir (o insistir) que se dirigen al mercado para instalarlos.
Comience desde esto:
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 }
Le doy un ejemplo de servicios de consulta. Si desea comprobar las actividades, llamará a queryIntentActivities ().
Creo que seguir el patrón descrito en esta publicación en el blog de desarrolladores de Android te ayudará. http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html Como TerryProbert señala si sabe que el Intent no está disponible, pida al usuario que instale la aplicación que falta.
Esto es lo que utilizo para devolver la primera actividad de 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, derivada de una clase base de la Misión. Las clases derivadas se llaman Mission1, Mission24 etc.
No todas las misiones se definen.
La clase base tiene una clase abstracta missionDescription 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. Devuelve cuando se devuelve la Descripción para la primera misión encontrada.
- Incrustación de anuncios en Recyclerview
- IllegalArgumentException: el proveedor no exisit: null en Maps V1