2012-06-01 15 views
5

Si solo envío texto, el selector Share Intent NO da a Facebook/Twitter como una opción.Android Share Intent Chooser - Compartir TEXTO con Facebook/Twitter Redes sociales, etc.

Solo Gmail, Skype y Evernote son opciones.

Aquí está mi código

Intent shareIntent = new Intent(Intent.ACTION_SEND); 

shareIntent.setType("plain/text"); 
shareIntent.putExtra(Intent.EXTRA_TEXT, text) 
startActivity(Intent.createChooser(shareIntent, "Share using")); 

He intentado diferentes combinaciones de setType() sin alegría incluyendo "text/*", "text/html" y pasando el texto HTML en el putExtra de la siguiente manera:

shareIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml("<p>This is the text that will be shared.</p>")); 

Cuando uso "text/plain", Facebook aparece como una opción pero el texto no se carga al seleccionarlo. Pero el texto se carga para Twitter, correo electrónico, SMS.

¿Alguien más ha encontrado este problema?

Cuando comparto una imagen, no hay ningún problema y Facebook junto con otras aplicaciones de medios sociales están disponibles en la lista.

+0

respuesta encontrar aquí http://stackoverflow.com/questions/3515198/share-text-on-facebook-from-android-app-via-action-send – tiptopjat

Respuesta

3

esto depende de qué filtros de intención están definidos por cada una de esas aplicaciones.
Por ejemplo si añado intención de filtro android.intent.action.send

Si decido sola imagen de la Galería aparecerá mi aplicación en la lista. Sin embargo, si elijo múltiple, mi aplicación no aparecerá, ya que no he agregado el archivo intencionado para android.intent.action.send_multiple

Por lo tanto, depende de qué intenciones esté filtrando facebook. Debes ver las notas de la versión o las páginas de ayuda o del desarrollador para eso.

+1

he encontrado una página que cubre esto en profundidad. Incluyendo una URL en mi texto de cadena. P.EJ. "Hola, mira http://www.bbc.co.uk Facebook reconoce la cadena. Extrañamente solo la parte de la URL de la cadena. Twitter reconoce toda la cadena junto con la URL. Http://stackoverflow.com/questions/ 3515198/share-text-on-facebook-from-android-app-via-action-send – tiptopjat

+0

porque esos son los intentos por los que están filtrando !!! – Orlymee

7

También debe ser "text/plain" y no "plain/text" según la documentación.

+0

Eso es lo que está causando el problema aquí. Gracias – jfcartier

2

El problema de Facebook es una limitación en los permisos de Facebook. Utilice la API de Facebook

1

Compartir a través de Twitter:

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); 
shareIntent.setType("text/plain"); 

shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String)v.getTag(R.string.app_name)); 

shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String)v.getTag(R.drawable.ic_launcher)); 

// para encontrar el nombre del paquete Twitter ---- >>

PackageManager pm = v.getContext().getPackageManager(); 

    List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); 

    for (final ResolveInfo app : activityList) 
     { 
     if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) 
      { 
      final ActivityInfo activity = app.activityInfo; 
      final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); 
      shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
      shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
      shareIntent.setComponent(name); 
      v.getContext().startActivity(shareIntent); 
      break; 
      } 
     } 

Compartir a través de Facebook

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); 
    shareIntent.setType("text/plain"); 
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,String)v.getTag(R.string.app_name)); 

    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String) 

v.getTag(R.drawable.ic_launcher)); 

// finding facebook package name 

    PackageManager pm = v.getContext().getPackageManager(); 
    List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); 
    for (final ResolveInfo app : activityList) 
    { 
     if ((app.activityInfo.name).contains("facebook")) 
     { 
      final ActivityInfo activity = app.activityInfo; 
      final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); 
      shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
      shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
      shareIntent.setComponent(name); 
      v.getContext().startActivity(shareIntent); 
      break; 
     } 
     } 

Compartir a través de Gmail

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); 

    shareIntent.setType("text/plain");   

shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT(String)v.getTag(R.string.app_name)); 

shareIntent.putExtra(android.content.Intent.EXTRA_TEXT(String)v.getTag(R.drawable.ic_launcher)); 

// finding gmail package name --- 

    PackageManager pm = v.getContext().getPackageManager(); 

    List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); 

     for (final ResolveInfo app : activityList) 
     { 
      if ((app.activityInfo.name).contains("gmail")) 
      { 
      final ActivityInfo activity = app.activityInfo; 
      final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); 
      shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
      shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
      shareIntent.setComponent(name); 
      v.getContext().startActivity(shareIntent); 
      break; 
      } 
     } 
Cuestiones relacionadas