2010-11-01 3 views
21

Y a-t-il quelque chose de similaire à getsharekit.com pour Android? Il permet de partager des URL vers des sites de réseaux sociaux. Y a-t-il quelque chose de similaire ou dois-je coder séparément pour facebook, Twitter et email?Partage d'URL vers Facebook, Twitter et e-mail dans Android?

+1

Un peu meilleures réponses pour chaque cas se trouvent dans les questions suivantes: [Facebook] (http://stackoverflow.com/questions/7545254/android-and-facebook-share-intent) , [Twitter] (http://stackoverflow.com/questions/2077008/android-intent-for-twitter-application), [email] (http://stackoverflow.com/questions/8701634/send-email-intent) (inclure l'URL dans le corps de l'e-mail en utilisant 'Intent.EXTRA_TEXT'). – Jonik

+0

Ceci est ma solution qui fonctionne bien juste pour partager l'URL sur Facebook, http://stackoverflow.com/a/29529335/513413 – Hesam

Répondre

55

Je ne sais pas si c'est ce que vous voulez dire, mais vous pouvez utiliser le menu de partage intégré dans Android ...

Vous pouvez partager une URL à Facebook, Twitter, Gmail et plus (aussi longtemps que le des applications installées sur votre appareil) en utilisant intentions:

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 l'application que vous souhaitez partager à n'est pas installé sur l'appareil de l'utilisateur, par exemple - facebook, vous devrez utiliser Facebook SDK.

Si vous voulez que votre activité pour gérer les données de texte partagées à partir d'autres applications aussi bien, vous pouvez ajouter à votre 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> 

Hope this helps!

+1

Je suis à la recherche d'une solution sans utiliser les applications installées. – sunil

+1

Cela ne fonctionne pas avec Facebook –

+0

merci, j'ai changé de texte/html en texte/plaine et cela a bien fonctionné, en plus d'ajouter la section de filtre d'intention à l'activité –

-4

Pour moi, cela fonctionne très bien:

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

ne fonctionne pas et donne "aucune application ne peut effectuer cette action" –

+0

Ne fonctionne pas: erreur "aucune application ne peut effectuer cette action" –

+0

raison pour laquelle aucune application ne peut effectuer cette action est qu'aucun type de mime n'a été spécifié. Filtre d'application ENVOYER l'action sur le type. Si vous ne le spécifiez pas (texte/clair) aucune application n'interceptera cette intention –

1

Vous pouvez essayer ...

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

Voici mon implémentation, vous pouvez ajouter d'autres applications si vous le souhaitez en ajoutant simplement les noms de package. Ce code trie également les applications en fonction de leurs noms.

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(); 
     } 
    } 
Questions connexes