Android, Как фильтровать социальный обмен для того, чтобы иметь только Facebook и Twitter?

В моем проекте мне нужно поделиться какой-то информацией в Just Facebook и Twitter. В настоящее время, когда вы используете следующие коды, андроид предлагает список всех социальных сетей, которые у вас есть на вашем мобильном телефоне.

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 в этом списке. Можно ли отфильтровать этот список, чтобы иметь эти два?

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().*********************(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.************.packageName.toLowerCase())) {
 targetedShare.putExtra(Intent.EXTRA_TEXT,Text);
 targetedShare.setPackage(info.************.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();
 }
 }
</resolveinfo></intent></intent></string></string></string></string>


Вы можете запросить действия, которые соответствуют намерению, и затем фильтровать имена пакетов приложений Twitter и Facebook, так как имя пакета приложения никогда не изменяется. Затем поместите эти результаты в пользовательский диалог.

Используя что-то подобное, вы можете отфильтровать результаты по имени пакета:

final PackageManager pm = context.getPackageManager();
final Intent intent = new Intent(Intent.ACTION_SEND);
List<resolveinfo> riList = pm.*********************(intent, 0);
for (ResolveInfo ri : riList) {
 ************ ai = ri.************;
 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 ************ objects: the name, the icon, etc.
 // You could get a component name like this:
 ComponentName cmp = new ComponentName(ai.packageName, ai.name);
 }
}
</resolveinfo>


Я не знаю, что вы имеете в виду, но вы можете использовать встроенное меню обмена Android...

Вы можете поделиться 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">
 </data></category></action></intent-filter>
 <meta-data>
 </meta-data></activity>

Надеюсь, это поможет!

licensed under cc by-sa 3.0 with attribution.