2012-03-02 11 views
8

W moim projekcie muszę udostępnić niektóre informacje w serwisie Facebook i na Twitterze. Obecnie, gdy używasz następujących kodów, Android oferuje listę wszystkich sieci społecznościowych, które masz w telefonie komórkowym.Android, Jak filtrować udostępnianie społeczne, aby mieć tylko Facebooka i Twittera?

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

Wymaganiem jest pokazanie tylko Facebooka i Twittera na tej liście. Czy można filtrować tę listę, aby mieć te dwa?

enter image description here

+0

Być może nie można to zrobić bezpośrednio z zamiarem, ale wierzę, że można realizować swoje własne okno, aby to zrobić . – Huang

Odpowiedz

0

Nie wiem, czy to co masz na myśli, ale można użyć Android wbudowany w menu udostępniania ...

Możesz udostępnić URL do Facebook, Twitter, Gmail i więcej (tak długo, jak aplikacje są instalowane na urządzeniu) wykorzystujące Intents:

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

nie zapomnij wstawić to do 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> 

Mam nadzieję, że to pomoże!

+2

Myślę, że ma na myśli to, że nie może mieć tam Gmaila ani innych aplikacji, tylko Facebooka i Twittera. –

+0

dzięki kochany Mike, ten kod jest taki sam jak mój. Jak wspomniał Ken, muszę filtrować listę, aby mieć tylko te dwie sieci społecznościowe. – Hesam

3

Można wyszukiwać czynności zgodne z intencją, a następnie filtrować nazwy pakietów aplikacji Twitter i Facebook, ponieważ nazwa pakietu aplikacji nigdy się nie zmienia. Następnie umieść te wyniki w niestandardowym oknie dialogowym.

Korzystanie coś takiego można filtrować wyniki według nazwy pakietu:

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); 
    } 
} 
+0

Dzięki drogi Ken, dlatego to pokazuje, nie można filtrować listy. Sprawdzę twoją sugestię, a później powiem wynik. Dzięki jeszcze raz. – Hesam

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