Android,如何过滤只有Facebook和Twitter的社交分享?

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

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。 是否有可能过滤这个列表为了有这两个?

在这里输入图像说明

Solutions Collecting From Web of "Android,如何过滤只有Facebook和Twitter的社交分享?"

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

您可以查询符合意图的活动,然后筛选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); } } 

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

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

 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> 

希望这可以帮助!