Obtener la aplicación seleccionada de Intent.createChooser
Estoy intentando capturar el resultado de Intent.createChooser
para saber qué aplicación seleccionó un usuario para compartir.
Sé que ha habido un montón de mensajes relacionados con esto:
- Detección de cambios de selección en WebView
- Establecer un color de fondo en un elemento ListView seleccionado en android
- Cómo obtener texto y valor seleccionados Android ListPreference
- Selección de texto de Webview no borrada
- Los identificadores de selección no aparecen en WebView (Android 4.0-4.3)
- ¿Cómo saber qué aplicación escogió el usuario al usar un selector de intenciones?
- Https://stackoverflow.com/questions/6137592/how-to-know-the-action-choosed-in-a-intent-createchooser?rq=1
- Cómo obtener la selección de usuario de startActivityForResult (Intent.createChooser (fileIntent, "Abrir archivo utilizando …"), APP_PICKED) ;?
- Captura e interceptación de ACTION_SEND intents en Android
Pero estos puestos son algo antiguos, y espero que pueda haber algunos nuevos desarrollos.
Estoy tratando de implementar una acción compartida sin tenerla presente en el menú. La solución más cercana a lo que quiero es proporcionada por ClickClickClack que sugieren la implementación de un selector de aplicaciones personalizadas, pero que parece pesado. Además, parece que podría haber algunos ganchos de Android para obtener la aplicación elegida, como ActivityChooserModel.OnChooseActivityListener .
Tengo el código siguiente en mi MainActivity, pero el método onShareTargetSelected
nunca se llama.
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, shareMessage()); sendIntent.setType("text/plain"); Intent intent = Intent.createChooser(sendIntent, getResources().getText(R.string.share_prompt)); ShareActionProvider sap = new ShareActionProvider(this); sap.setShareIntent(sendIntent); sap.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() { @Override public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { System.out.println("Success!!"); return false; } }); startActivityForResult(intent, 1);
- Cómo utilizar Android Spinner como una lista desplegable
- Android - obtener la selección de texto de EditText
- ¿Cómo se puede cambiar el widget de selección de texto en pantalla?
- Cómo obtener la selección de usuario de startActivityForResult (Intent.createChooser (fileIntent, "Abrir archivo utilizando ..."), APP_PICKED) ;?
- Android: smoothScrollToPosition () no funciona correctamente
- Selección de Android Spinner
- Programatically fuego barra de acción elemento de menú en Android
- ¿Cómo seleccionar un elemento ListView después de un clic largo?
A partir del nivel API 22 ahora es realmente posible. En Android 5.1 se createChooser (Intent target, CharSequence title, IntentSender sender)
un método ( createChooser (Intent target, CharSequence title, IntentSender sender)
) que permite recibir los resultados de la elección del usuario. Cuando proporciona un IntentSender
para createChooser
, el remitente será notificado por el diálogo del selector con el ComponentName
elegido por el usuario. Se proporcionará en el extra llamado EXTRA_CHOSEN_COMPONENT
int el IntentSender
que se notifica .
Estoy intentando capturar el resultado de Intent.createChooser para saber qué aplicación seleccionó un usuario para compartir.
Eso no es posible.
Otras soluciones de "elección", como ShareActionProvider
, pueden ofrecer más. No he examinado la Intent
entregada a onShareTargetSelected()
para ver si contiene el ComponentName
del destino elegido, aunque los documentos sugieren que debería.
Y, si por alguna razón no lo hace, le invitamos a intentar fork ShareActionProvider
para agregar los ganchos que desea.
La razón por la cual createChooser()
no se puede manejar de esta manera es simplemente porque la "elección" se está haciendo por un proceso separado del tuyo.
Tengo el código siguiente en mi MainActivity, pero el método onShareTargetSelected nunca se llama.
ShareActionProvider
va en la barra de acción. No se puede crear una instancia, llamar a un par de setters y esperar que algo suceda.
- Esquema de URL de Android: intent.getData () == null (PhoneGap)
- Android – El oyente de distribución global no funciona