Android, How to filter social sharing in order to have only Facebook and Twitter?

In my project, I need to share some information on Just Facebook and Twitter. Currently, when you use the following codes, android offers a list of all the social networks that you have on your mobile phone.

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

The requirement simply shows Facebook and Twitter on this list. Is it possible to filter this list to have these two?

enter image description here

+8
android facebook twitter social-networking
source share
3 answers
  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(); } } 
+8
source share

You can request actions that match the intent, and then filter the package names of the Twitter and Facebook applications since the package name of the application never changes. Then put these results in the user dialog.

Using something like this, you can filter the results by package name:

 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 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
source share

I don’t know what you mean, but you can use the built-in Android sharing menu ...

You can share the URL of Facebook, Twitter, Gmail , etc. (assuming apps are installed on your device) using intent:

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

Remember to insert this in 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> 

Hope this helps!

0
source share

All Articles