2014-01-21 8 views
6

ich einen Weg suchen, wie nur einen Text zu sozialen Netzwerken zu teilen, android Aktie mit intents.Almost jedenAndroid.Share zu sozialen Netzwerken

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

diesem Code bietet aber es tut mit Facebook arbeiten. Gibt es eine Möglichkeit, Text für alle Netzwerke freizugeben? Vielen Dank.

+1

haben Sie Facebook-App in Ihrem Gerät .. ??? –

+0

ja, natürlich. Dieses Problem, weil Facebook API Text nicht unterstützt, nur URL. –

Antwort

3
public void onShareClick(View v) { 
    Resources resources = getResources(); 

    Intent emailIntent = new Intent(); 
    emailIntent.setAction(Intent.ACTION_SEND); 
    // Native email client doesn't currently support HTML, but it doesn't hurt to try in case they fix it 
    emailIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_email_native))); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_email_subject)); 
    emailIntent.setType("message/rfc822"); 

    PackageManager pm = getPackageManager(); 
    Intent sendIntent = new Intent(Intent.ACTION_SEND);  
    sendIntent.setType("text/plain"); 


    Intent openInChooser = Intent.createChooser(emailIntent, resources.getString(R.string.share_chooser_text)); 

    List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, 0); 
    List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();   
    for (int i = 0; i < resInfo.size(); i++) { 
     // Extract the label, append it, and repackage it in a LabeledIntent 
     ResolveInfo ri = resInfo.get(i); 
     String packageName = ri.activityInfo.packageName; 
     if(packageName.contains("android.email")) { 
      emailIntent.setPackage(packageName); 
     } else if(packageName.contains("twitter") || packageName.contains("facebook") || packageName.contains("mms") || packageName.contains("android.gm")) { 
      Intent intent = new Intent(); 
      intent.setComponent(new ComponentName(packageName, ri.activityInfo.name)); 
      intent.setAction(Intent.ACTION_SEND); 
      intent.setType("text/plain"); 
      if(packageName.contains("twitter")) { 
       intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_twitter)); 
      } else if(packageName.contains("facebook")) { 
       // Warning: Facebook IGNORES our text. They say "These fields are intended for users to express themselves. Pre-filling these fields erodes the authenticity of the user voice." 
       // One workaround is to use the Facebook SDK to post, but that doesn't allow the user to choose how they want to share. We can also make a custom landing page, and the link 
       // will show the <meta content ="..."> text from that page with our link in Facebook. 
       intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_facebook)); 
      } else if(packageName.contains("mms")) { 
       intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_sms)); 
      } else if(packageName.contains("android.gm")) { 
       intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_email_gmail))); 
       intent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_email_subject));    
       intent.setType("message/rfc822"); 
      } 

      intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon)); 
     } 
    } 

    // convert intentList to array 
    LabeledIntent[] extraIntents = intentList.toArray(new LabeledIntent[ intentList.size() ]); 

    openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents); 
    startActivity(openInChooser);  
} 
+0

dieser Code hat nicht funktioniert wie meins –

+0

Was ist ein Problem oder Ausnahme? – DaxeshKhatri

+0

theoretisch muss dieser Code Text an alle Netzwerke teilen, aber in der Praxis funktioniert es nicht mit Facebook App. –

5

können Sie soziale Netzwerk-Bibliothek verwenden, um direkt zu posten sozialen Netzwerken ohne Code Chaos gewählt

Ich benutze ASNE es wirklich einfach ist und kann nicht nur Post, aber Login oder sich Freunde

bearbeiten: wie @benka empfohlen Ich füge Code hinzu, wie ich in sozialen Netzwerken in meiner App posten:

Fügen Sie Abhängigkeit zu ausgewählten sozialen Netzwerk (Facebook und Twitter, aber ASNE cont ains mehr):

dependencies { 
... 
    compile 'com.github.asne:asne-facebook:0.2.1' 
    compile 'com.github.asne:asne-twitter:0.2.1' 
... 
} 

als nur mSocialNetworkManager von ASNE

mSocialNetworkManager = (SocialNetworkManager) getFragmentManager().findFragmentByTag(SOCIAL_NETWORK_TAG); 
    if (mSocialNetworkManager == null) { 
     mSocialNetworkManager = new SocialNetworkManager(); 
     FacebookSocialNetwork fbNetwork = new FacebookSocialNetwork(this, fbScope); 
     mSocialNetworkManager.addSocialNetwork(fbNetwork); 
     TwitterSocialNetwork twNetwork = new TwitterSocialNetwork(this, key, secret); 
     mSocialNetworkManager.addSocialNetwork(twNetwork); 
     getFragmentManager().beginTransaction().add(mSocialNetworkManager, SOCIAL_NETWORK_TAG).commit(); 
    } 

hinzuzufügen, als Show-Tasten meine-Buttons in ActionBar Menü zu teilen, und zuletzt Check-Login und verwenden

socialNetwork.requestPostMessage("Message"); 

Das ist alles, ich brauche Freunde Liste und ich füge einfach

socialNetwork.requestGetFriends(); 
+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – benka

+0

@benka, wahr ... ich füge meine Erfahrung hinzu – Seko

Verwandte Themen