No se muestran las aplicaciones resueltas por Intenciones con "EXTRA_INITIAL_INTENTS" adicionales

Estoy tratando de compartir files con clientes de correo electrónico y Google Drive. Ahora, en el siguiente código, solo se abre la unidad de Google y los clientes de correo electrónico no se abren en absoluto. Puedo proporcionar el código Java equivalente del siguiente código si es necesario

val photoURI: Uri = FileProvider.getUriForFile(this, "com.emerson.oversight.com.emerson.oversight.provider", File(this.cacheDir.path + "/SensorReport.pdf")) val emailIntent = Intent(Intent.ACTION_SENDTO) emailIntent.data = Uri.parse("mailto:") emailIntent.putExtra(Intent.EXTRA_STREAM, photoURI) emailIntent.putExtra(Intent.EXTRA_EMAIL, "asd@dsa.dsa") emailIntent.putExtra(Intent.EXTRA_SUBJECT, "dsadsada") emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) val driveIntent = Intent() driveIntent.`package`= "com.google.android.apps.docs" driveIntent.action = Intent.ACTION_VIEW val fileID = File(this.cacheDir.path + "/SensorReport.pdf") val url = "https://docs.google.com/file/d/" + fileID driveIntent.data = Uri.parse(url) val openInChooser = Intent.createChooser(driveIntent, getString(R.string.share_using)) openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayListOf(emailIntent)) startActivity(openInChooser) 

Por favor ayuda

Casi getPackageManager().queryIntentActivities allí, la única pieza que falta en el rompecabezas es el getPackageManager().queryIntentActivities que devolverá todas las actividades que pueden manejar tu bash de correo electrónico. Con ResolveInfo devuelto, puede generar un bash para que cada opción de correo electrónico se muestre en el selector. Luego puede pasar el set de esos bashs como Intent.EXTRA_INITIAL_INTENTS . Incluso puede excluir ciertos packages si lo desea aquí. Entonces, la parte final de tu código se vería así:

  val openInChooser = Intent.createChooser(driveIntent, getString(R.string.share_using)) val emailOptionIntents = mutableListOf<Intent>() val resInfo = getPackageManager().queryIntentActivities(emailIntent, 0) if (!resInfo.isEmpty()) { for (resolveInfo in resInfo) { val emailOptionIntent = Intent(Intent.ACTION_SENDTO) emailOptionIntent.data = Uri.parse("mailto:") emailOptionIntent.putExtra(Intent.EXTRA_STREAM, photoURI) emailOptionIntent.putExtra(Intent.EXTRA_EMAIL, "asd@dsa.dsa") emailOptionIntent.putExtra(Intent.EXTRA_SUBJECT, "dsadsada") emailOptionIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) emailOptionIntent.`package` = resolveInfo.activityInfo.packageName emailOptionIntents.add(emailOptionIntent) } } openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, emailOptionIntents.toTypedArray()) startActivity(openInChooser) 
  • En Kotlin, puedo anular algunos operadores existentes, pero ¿qué hay de crear nuevos operadores?
  • ¿Por qué no puedo usar lambda para la interfaz en kotlin?
  • Kotlin HTML-Builder
  • Android kotlin y Room Persistences library not building
  • La desconnection no funciona en la aplicación Spring Boot (no es compatible con el método POST)
  • ¿Cómo migrar de Gradle a Kobalt?
  • Custom KeyDeserializer
  • Los methods de logging de Anko no se pueden resolver
  • Ignorar ciertas properties al generar equals (), hashCode (), etc.
  • Android Kotlin Gson Slow Json Deserialization
  • La mejor forma de manejar los retornos en el pnetworkingicado