2010-11-01 12 views
21

¿Hay algo similar a getsharekit.com para Android? Permite compartir URL a sitios de redes sociales. ¿Hay algo similar a esto o necesito codificar por separado para Facebook, Twitter y correo electrónico?Compartir URL a Facebook, Twitter y correo electrónico en Android?

+1

algo mejores respuestas para cada caso se pueden encontrar en las siguientes preguntas: [Facebook] (http://stackoverflow.com/questions/7545254/android-and-facebook-share-intent) [Twitter] (http://stackoverflow.com/questions/2077008/android-intent-for-twitter-application), [e-mail] (http://stackoverflow.com/questions/8701634/send-email-intent) (incluya la URL en el cuerpo del correo electrónico usando 'Intent.EXTRA_TEXT'). – Jonik

+0

Esta es mi solución que está trabajando bien sólo para compartir la URL en Facebook, http://stackoverflow.com/a/29529335/513413 – Hesam

Respuesta

55

No sé si eso es lo que quieres decir, pero se puede utilizar el Android incorporado en el menú para compartir ...

Puede compartir una URL a Facebook, Twitter, Gmail y más (siempre y cuando la aplicaciones están instaladas en el dispositivo) utilizando Intentos:

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType("text/plain"); 
i.putExtra(Intent.EXTRA_SUBJECT, "Sharing URL"); 
i.putExtra(Intent.EXTRA_TEXT, "http://www.url.com"); 
startActivity(Intent.createChooser(i, "Share URL")); 

Si la aplicación que desea compartir a no está instalado en el dispositivo del usuario, por ejemplo - facebook, entonces usted tendrá que usar Facebook SDK.

Si desea que su actividad para manejar los datos de texto de otras aplicaciones compartidas, así, se puede añadir a su AndroidManifest.xml:

<activity android:name=".ShareLink"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 

Espero que esto ayude!

+1

Busco a una solución sin necesidad de utilizar las aplicaciones instaladas. – sunil

+1

Esto no funciona con Facebook –

+0

gracias, me he cambiado de text/html text/plain y esto funcionó bien, además de agregar sección de filtro intención de la actividad –

-4

Para mí esto funciona bien:

startActivity(Intent.createChooser(new Intent(Intent.ACTION_SEND, 
    Uri.parse("http://...")),"Share URL"));// share url is on your own 
+1

no funciona y ofrece "ninguna aplicación puede realizar esta acción" –

+0

No funciona: error "ninguna aplicación puede realizar esta acción" –

+0

razón por la que no se pueden aplicar aplicaciones para esta acción es que no se ha especificado ningún tipo de mimetype. Aplicación de filtro ENVIAR acción en tipo. Si no lo especifica (texto/normal) ninguna aplicación interceptará esa intención –

1

Puede probar este ...

private void shareTextUrl() { 
     Intent share = new Intent(android.content.Intent.ACTION_SEND); 
     share.setType("text/plain"); 
     share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 

     share.putExtra(Intent.EXTRA_SUBJECT, "Title Of The Post"); 
     share.putExtra(Intent.EXTRA_TEXT, "<source url>"); 

     startActivity(Intent.createChooser(share, "Share text to...")); 
    } 
0

Aquí está mi aplicación, puede agregar más aplicaciones si lo desea con sólo añadir los nombres de paquetes. Este código también ordena las aplicaciones de acuerdo con sus nombres.

List<Intent> targetShareIntents = new ArrayList<Intent>(); 
    Intent shareIntent = new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    shareIntent.setType("text/plain"); 
    PackageManager pm = getActivity().getPackageManager(); 
    List<ResolveInfo> resInfos = pm.queryIntentActivities(shareIntent, 0); 
    if (!resInfos.isEmpty()) { 
     System.out.println("Have package"); 
     for (ResolveInfo resInfo : resInfos) { 
      String packageName = resInfo.activityInfo.packageName; 
      Log.i("Package Name", packageName); 

      if (packageName.contains("com.twitter.android") || packageName.contains("com.facebook.katana") 
        || packageName.contains("com.whatsapp") || packageName.contains("com.google.android.apps.plus") 
        || packageName.contains("com.google.android.talk") || packageName.contains("com.slack") 
        || packageName.contains("com.google.android.gm") || packageName.contains("com.facebook.orca") 
        || packageName.contains("com.yahoo.mobile") || packageName.contains("com.skype.raider") 
        || packageName.contains("com.android.mms")|| packageName.contains("com.linkedin.android") 
        || packageName.contains("com.google.android.apps.messaging")) { 
       Intent intent = new Intent(); 

       intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name)); 
       intent.putExtra("AppName", resInfo.loadLabel(pm).toString()); 
       intent.setAction(Intent.ACTION_SEND); 
       intent.setType("text/plain"); 
       intent.putExtra(Intent.EXTRA_TEXT, "https://website.com/"); 
       intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share_text)); 
       intent.setPackage(packageName); 
       targetShareIntents.add(intent); 
      } 
     } 
     if (!targetShareIntents.isEmpty()) { 
      Collections.sort(targetShareIntents, new Comparator<Intent>() { 
       @Override 
       public int compare(Intent o1, Intent o2) { 
        return o1.getStringExtra("AppName").compareTo(o2.getStringExtra("AppName")); 
       } 
      }); 
      Intent chooserIntent = Intent.createChooser(targetShareIntents.remove(0), "Select app to share"); 
      chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{})); 
      startActivity(chooserIntent); 
     } else { 
      Toast.makeText(getActivity(), "No app to share.", Toast.LENGTH_LONG).show(); 
     } 
    } 
Cuestiones relacionadas