2014-01-21 199 views
6

我正在寻找一种方式,如何共享只是一个文本到社交网络,采用了android份额intents.Almost大家提供了这个代码Android.Share社交网络

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

但它不与Facebook合作。有没有办法将文本分享给所有网络。谢谢。

+1

有你的Facebook应用程序在你的设备.. ??? –

+0

是的,当然。这个问题,因为Facebook的API不支持文本,只有网址。 –

回答

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

此代码没有像我的工作 –

+0

有什么问题或异常? – DaxeshKhatri

+0

从理论上讲,该代码必须共享文本到所有网络,但实际上,它不适用于Facebook应用程序。 –

5

您可以使用社交网络库直接张贴到所选择的社交网络,没有任何代码混乱

我用ASNE它的真正简单,不仅能后,但登陆或得到朋友

编辑:作为@benka建议我添加一些代码,我如何在我的应用中发布到社交网络:

添加对所选社交网络的依赖(facebook和twitter,但ASNE cont AINS更多):

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

不是简单地从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(); 
    } 

添加mSocialNetworkManager不是显示按钮分享在动作条菜单我的自定义按钮,最后检查登录和使用

socialNetwork.requestPostMessage("Message"); 

多数民众赞成在所有,我需要得到friendslist,我只是添加

socialNetwork.requestGetFriends(); 
+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – benka

+0

@benka,真的......我添加了我的expirience – Seko