【问题标题】:Android, How to filter social sharing for having just Facebook and Twitter?Android,如何过滤只有 Facebook 和 Twitter 的社交分享?
【发布时间】:2012-03-20 15:01:08
【问题描述】:

在我的项目中,我需要将一些信息分享到 Just Facebook 和 Twitter。目前,当您使用以下代码时,android 会提供您手机中所有社交网络的列表。

public void share(String subject,String text) {
 final Intent intent = new Intent(Intent.ACTION_SEND);

 intent.setType("text/plain");
 intent.putExtra(Intent.EXTRA_SUBJECT, subject);
 intent.putExtra(Intent.EXTRA_TEXT, text);
 startActivity(Intent.createChooser(intent, "Share with:"));
}

要求只是在此列表中显示 Facebook 和 Twitter。是否可以过滤此列表以获得这两个?

【问题讨论】:

  • 也许您不能直接在 Intent 中执行此操作,但我相信您可以实现自己的对话框来执行此操作。

标签: android facebook twitter social-networking


【解决方案1】:

我不知道你是不是这个意思,但你可以使用 Android 内置的共享菜单...

您可以使用 Intents 将 URL 分享到 Facebook、Twitter、Gmail 等(只要您的设备上安装了应用程序):

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"));

不要忘记将其插入 Manifest.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>
            <meta-data/>
            </activity>

希望这会有所帮助!

【讨论】:

  • 我认为他的意思是他怎么能没有 Gmail 和其他应用程序,只有 Facebook 和 Twitter。
  • 谢谢亲爱的迈克,这个代码和我的一样。正如 Ken 所说,我需要过滤列表才能拥有这两个社交网络。
【解决方案2】:

您可以查询与意图匹配的活动,然后过滤 Twitter 和 Facebook 应用程序的包名,因为应用程序的包名永远不会改变。然后将这些结果放入自定义对话框中。

使用类似的方法,您可以按包名过滤结果:

final PackageManager pm = context.getPackageManager();
final Intent intent = new Intent(Intent.ACTION_SEND);
List<ResolveInfo> riList = pm.queryIntentActivities(intent, 0);
for (ResolveInfo ri : riList) {
    ActivityInfo ai = ri.activityInfo;
    String pkg = ai.packageName;
    if (pkg.equals("com.facebook.katana") || pkg.equals("com.twitter.android")) {

        // Add to the list of accepted activities.

        // There's a lot of info available in the
        // ResolveInfo and ActivityInfo objects: the name, the icon, etc.

        // You could get a component name like this:
        ComponentName cmp = new ComponentName(ai.packageName, ai.name);
    }
}

【讨论】:

  • 谢谢亲爱的肯,因此它显示无法过滤列表。我会测试你的建议,稍后我会告诉结果。再次感谢。
【解决方案3】:
    Button btnshare=(Button)rootView.findViewById(R.id.btnshare);
        btnshare.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Share(getShareApplication(),"Hello Text Share");
            }
        });

    private List<String> getShareApplication(){
        List<String> mList=new ArrayList<String>();
        mList.add("com.facebook.katana");
        mList.add("com.twitter.android");
        mList.add("com.google.android.gm");
        return mList;

    }
    private void Share(List<String> PackageName,String Text) {
        try
        {
            List<Intent> targetedShareIntents = new ArrayList<Intent>();
            Intent share = new Intent(android.content.Intent.ACTION_SEND);
            share.setType("text/plain");
            List<ResolveInfo> resInfo = getActivity().getPackageManager().queryIntentActivities(share, 0);
            if (!resInfo.isEmpty()){
                for (ResolveInfo info : resInfo) {
                    Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);
                    targetedShare.setType("text/plain"); // put here your mime type
                    if (PackageName.contains(info.activityInfo.packageName.toLowerCase())) {
                        targetedShare.putExtra(Intent.EXTRA_TEXT,Text);
                        targetedShare.setPackage(info.activityInfo.packageName.toLowerCase());
                        targetedShareIntents.add(targetedShare);
                    }
                }
                Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
                startActivity(chooserIntent);
            }
        }
        catch(Exception e){
             e.printStackTrace();
         }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2012-12-07
    • 2014-05-01
    • 2013-08-10
    • 2017-09-15
    • 2014-01-14
    相关资源
    最近更新 更多