Aplicación de Android para aplicaciones de Twitter

¿Es posible mostrar una lista de aplicaciones (con la intent.createChooser ) que sólo me muestran mis aplicaciones de twitter en mi teléfono (por lo que htc peep (htc héroe) o twitdroid). He intentado con intent.settype("application/twitter") pero no encuentra ninguna aplicación para twitter y sólo muestra mis aplicaciones de correo.

Gracias,

Wouter

Es totalmente posible que sus usuarios sólo, ahora y siempre, sólo quieren publicar en Twitter.

Creo que es más probable que sus usuarios quieran enviar información a la gente, y Twitter es una posibilidad. Pero también pueden enviar un mensaje de texto, un correo electrónico, etc.

En ese caso, utilice ACTION_SEND , como se describe aquí . Twidroid, en particular, admite ACTION_SEND , por lo que aparecerá en la lista de mecanismos de entrega disponibles.

Estoy publicando esto porque no he visto una solución todavía que hace exactamente lo que quiero.

Esto inicialmente lanza la aplicación oficial de Twitter , o si no está instalado, abre un cuadro de diálogo "Completar la acción usando …" ( como este ) o inicia directamente un navegador web.

Para obtener una lista de los diferentes parámetros en la URL de twitter.com, consulte los documentos del botón Tweet . Recuerde que la URL codifica los valores de los parámetros. (Este código es específicamente para el tweeting de una URL, si no lo desea, simplemente deje fuera el parámetro de url .)

 // Create intent using ACTION_VIEW and a normal Twitter url: String tweetUrl = String.format("https://twitter.com/intent/tweet?text=%s&url=%s", urlEncode("Tweet text"), urlEncode("https://www.google.fi/")); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tweetUrl)); // Narrow down to official Twitter app, if available: List<ResolveInfo> matches = getPackageManager().queryIntentActivities(intent, 0); for (ResolveInfo info : matches) { if (info.activityInfo.packageName.toLowerCase().startsWith("com.twitter")) { intent.setPackage(info.activityInfo.packageName); } } startActivity(intent); 

(La codificación de URL es más limpia si tienes una pequeña utilidad como ésta en alguna parte, por ejemplo "StringUtils".)

 public static String urlEncode(String s) { try { return URLEncoder.encode(s, "UTF-8"); } catch (UnsupportedEncodingException e) { Log.wtf(TAG, "UTF-8 should always be supported", e); throw new RuntimeException("URLEncoder.encode() failed for " + s); } } 

Por ejemplo, en mi dispositivo Nexus 7, esto abre directamente la aplicación oficial de Twitter :

Introduzca aquí la descripción de la imagen

Si la aplicación oficial de Twitter no está instalada y el usuario selecciona Chrome o se abre automáticamente (como la única aplicación que puede manejar la intención):

Introduzca aquí la descripción de la imagen

Las soluciones publicadas anteriormente le permiten publicar directamente en su primera aplicación de twitter. Para mostrar una lista de la aplicación twitters (si hay más de una), puede personalizar su Intent.createChooser para mostrar sólo los Itents que desea.

El truco es añadir EXTRA_INITIAL_INTENTS a la lista predeterminada, generada desde createChoose, y quitar los otros Intents de la lista.

Mira esta muestra en la que creo un selector que muestra sólo mis aplicaciones de correo electrónico. En mi caso aparece tres correos: Gmail, YahooMail y el correo predeterminado.

 private void share(String nameApp, String imagePath) { List<Intent> targetedShareIntents = new ArrayList<Intent>(); Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("image/jpeg"); List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND); targetedShare.setType("image/jpeg"); // put here your mime type if (info.activityInfo.packageName.toLowerCase().contains(nameApp) || info.activityInfo.name.toLowerCase().contains(nameApp)) { targetedShare.putExtra(Intent.EXTRA_TEXT, "My body of post/email"); targetedShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath)) ); targetedShare.setPackage(info.activityInfo.packageName); targetedShareIntents.add(targetedShare); } } Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); startActivity(chooserIntent); } } 

Puedes ejecutar así: share ("twi", "/sdcard/dcim/Camera/photo.jpg");

Esto se basó en la publicación: Filtrado personalizado del selector de intenciones basado en el nombre del paquete Android instalado

Esta pregunta es un poco más antigua, pero como acabo de encontrar un problema similar, también puede ser de interés para los demás. Primero, como lo mencionó Pedro, crea tu intención:

 Intent tweetIntent = new Intent(Intent.ACTION_SEND); tweetIntent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore"); tweetIntent.setType("application/twitter"); 

"Application / twitter" es de hecho un tipo de contenido conocido, vea aquí . Ahora, cuando intentas iniciar una actividad con esta intención, mostrará todo tipo de aplicaciones que no son realmente clientes de Twitter, pero quieres una parte de la acción. Como ya se mencionó en un par de los "¿por qué incluso quiere hacer eso?" Tipo de respuestas, algunos usuarios pueden encontrar que útil. Por otro lado, si tengo un botón en mi aplicación que dice "Tweet this!", El usuario esperaría mucho que esto traiga a un cliente de Twitter.

Lo que significa que en lugar de simplemente lanzar una actividad, necesitamos filtrar las que son apropiadas:

 PackageManager pm = getPackageManager(); List<ResolveInfo> lract = pm.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY); boolean resolved = false; for(ResolveInfo ri: lract) { if(ri.activityInfo.name.endsWith(".SendTweet")) { tweetIntent.setClassName(ri.activityInfo.packageName, ri.activityInfo.name); resolved = true; break; } } 

Usted tendría que experimentar un poco con los diferentes proveedores, pero si el nombre termina en ". SendTweet" que son bastante seguros (este es el nombre de la actividad en Twidroyd). También puede comprobar su depurador para los nombres de los paquetes que desea utilizar y ajustar la comparación de cadenas en consecuencia (es decir, Twidroyd utiliza "com.twidroid. *").

En este ejemplo simple, elegimos la primera actividad de concordancia que encontremos. Esto lleva al cliente de Twitter directamente, sin que el usuario tenga que tomar ninguna decisión. Si no hay clientes adecuados de Twitter, volveremos al selector de actividad estándar:

 startActivity(resolved ? tweetIntent : Intent.createChooser(tweetIntent, "Choose one")); 

Usted podría ampliar el código y tener en cuenta el caso de que hay más de un cliente de Twitter, cuando es posible que desee crear su propio diálogo selector de todos los nombres de actividad que encuentre.

Estas respuestas son demasiado complejas.

Si acaba de hacer una intención normal de URL que hace a Twitter.com, obtendrá esta pantalla:

Introduzca aquí la descripción de la imagen

Que le da la opción de ir al sitio web si no tiene aplicaciones de Twitter instalado.

 String url = "https://twitter.com/intent/tweet?source=webclient&text=TWEET+THIS!"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); 

Ya sea

  • Intent.ACTION_SEND una actividad con un Intent con acción Intent.ACTION_SEND y el tipo MIME text/plain . Tendrá todas las aplicaciones compatibles con el envío de texto. Que debe ser cualquier cliente twitter, así como Gmail, Dropbox, etc
  • O bien, intenta buscar la acción específica de cada cliente que conoce, como "com.twitter.android.PostActivity" para el cliente oficial . Eso señalará a este cliente, y que es poco probable que sea una lista completa.
  • O, usted comienza con el segundo punto, y caer de nuevo en la primera …

Nope. El tipo de intención es algo como image/png o application/pdf , es decir, un tipo de archivo, y con createChooser básicamente estás preguntando qué aplicaciones pueden abrir este tipo de archivo.

Ahora, no hay tal cosa como un archivo de application/twitter que se puede abrir, por lo que no funcionará. No soy consciente de cualquier otra manera que usted puede lograr lo que quiere tampoco.

Desde http://twidroid.com/plugins/

ACTION_SEND de Twidroid

 Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is a sample message via Public Intent"); sendIntent.setType("application/twitter"); startActivity(Intent.createChooser(sendIntent, null)); 

He utilizado "billynomates" respuesta y fue capaz de utilizar hashtags mediante el uso de la "URLEncoder.encode (," UTF-8 ")" función. Las etiquetas hash aparecieron muy bien.

 String originalMessage = "some message #MESSAGE"; String originalMessageEscaped = null; try { originalMessageEscaped = String.format( "https://twitter.com/intent/tweet?source=webclient&text=%s", URLEncoder.encode(originalMessage, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if(originalMessageEscaped != null) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(originalMessageEscaped)); startActivity(i); } else { // Some Error } 
  • Abrir perfil de usuario de aplicaciones de Twitter desde la aplicación de Android
  • Android Vine App "Iniciar sesión con Twitter"
  • Twitter: recuperar el código PIN de la webview. Androide
  • Android Twitter Conflicto del SDK de la tela con Google GSON
  • Cómo cerrar sesión / cambiar la cuenta de Twitter con Parse
  • Cookie de encabezado no válido cuando integra twitter en android
  • ListView setOnItemClickListener no desencadena cuando un elemento tiene un vínculo en ello
  • Cómo compartir la imagen http directamente a twitter en android?
  • Twitter4J + Android: El desafío de autenticación es una excepción nula
  • método onResume no funciona para la implementación de Twitter
  • Android envía mensajes directos de Twitter a través de la intención
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.