Android enviar imagen con teclado

Estoy tratando de implementar una aplicación de teclado que debe ser capaz de enviar imágenes a la actividad actual (WhatsApp, aplicación de mensajería, etc).

¿Hay alguna manera de lograrlo? Por supuesto que se limitaría a las aplicaciones que aceptan imágenes, pero me pregunto cuál es el mejor enfoque.

Intentado usar un StringBuilder con un ImageSpan pero no podría conseguirlo trabajar. Me preguntaba si había una mejor manera. Usando Intents tal vez?

Por último logrado esto mediante el envío de Intents a la aplicación de primer plano, pero esto tiene limitaciones: las aplicaciones de mensajería por lo general requieren para seleccionar la conversación, que rompe el flujo de usuario y agrega un paso innecesario (a menos que exponga una forma de enviar la intención a un chat específico) .

Esto se puede lograr de la siguiente manera:

Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); sendIntent.setPackage(getCurrentAppPackage(context, editorInfo)); return sendIntent; 

Donde getCurrentAppPackage(...) es un método que devuelve la actividad de primer plano dada un Context y un EditorInfo , que puede obtener de su implementación IME cuando se enlaza a un campo de entrada.

 public String getCurrentAppPackage(Context context, EditorInfo info) { if(info != null && info.packageName != null) { return info.packageName; } final PackageManager pm = context.getPackageManager(); //Get the Activity Manager Object ActivityManager aManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); //Get the list of running Applications List<ActivityManager.RunningAppProcessInfo> rapInfoList = aManager.getRunningAppProcesses(); //Iterate all running apps to get their details for (ActivityManager.RunningAppProcessInfo rapInfo : rapInfoList) { //error getting package name for this process so move on if (rapInfo.pkgList.length == 0) { Log.i("DISCARDED PACKAGE", rapInfo.processName); continue; } try { PackageInfo pkgInfo = pm.getPackageInfo(rapInfo.pkgList[0], PackageManager.GET_ACTIVITIES); return pkgInfo.packageName; } catch (PackageManager.NameNotFoundException e) { // Keep iterating } } return null; } 

Actualización : La API de contenido de confirmación se agregó en el nivel 25 de API (y la biblioteca de soporte hace que funcione desde la API 13). Más información aquí: https://developer.android.com/preview/image-keyboard.html Hasta que las aplicaciones comiencen a implementarlo, el método anterior puede usarse como fallback.

  • Teclado suave oculta la barra de acción
  • ¿Por qué no android: windowSoftInputMode = "stateVisible | adjustResize" ajustar la pantalla cuando se muestra el teclado virtual?
  • ¿Cómo mostrar el teclado en PopupWindow?
  • Cómo ajustar el diseño cuando aparece el teclado virtual
  • Webview no cambia el tamaño cuando aparece el teclado
  • El teclado suave no activa el desplazamiento en un ScrollView
  • Salida de un carácter por dos teclas en el teclado de Android
  • Cómo mostrar el teclado virtual automáticamente cuando EditText recibe el foco
  • ¿Cómo puedo enfocar una vista de acción plegable Editar elemento de texto en la barra de acción (cuando se expande) y forzar el teclado virtual a abrir?
  • SoftKeyboard no se muestra para un Fragmento recién mostrado
  • Ocultar el teclado EditText cuando android: windowTranslucentStatus = true
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.