2012-03-02 10 views
8

Projemde sadece Facebook ve Twitter'a bazı bilgileri paylaşmam gerekiyor. Şu anda aşağıdaki kodları kullandığınızda, android cep telefonunuzda sahip olduğunuz tüm sosyal ağların listesini sunar.Android, Sadece Facebook ve Twitter'a sahip olmak için sosyal paylaşımı nasıl filtreleyebilirim?

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

Bu gereksinim sadece Facebook ve Twitter'ı bu listede gösteriyor. Bu listeye sahip olmak için bu listeyi filtrelemek mümkün mü? Sen Facebook, Twitter, Gmail için bir URL paylaşabilir

enter image description here

+0

Belki doğrudan Niyet içinde bunu yapamaz, ama bunu yapmak için kendi iletişim uygulayabilirsiniz inanıyoruz . – Huang

cevap

0

ben kastettiğin buysa bilmiyorum ama Android yerleşik paylaşım menüsünden kullanabilirsiniz ... ve (sürece uygulamaları cihazınızın yüklü olarak) daha fazlasını kullanarak 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")); 

Manifest.xml bu eklemek unutmayın:

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

Bu yardımcı olur umarız!

+2

Sanırım o, Facebook ve Twitter'da nasıl olsa Gmail ve diğer uygulamaların bulunmadığı anlamına geliyor. –

+0

teşekkürler canım Mike, Bu kod benimkiyle aynı. Ken tarafından belirtildiği gibi, sadece bu iki sosyal ağa sahip olmak için listeyi filtrelemem gerekiyor. – Hesam

3

Niyetle eşleşen etkinlikleri sorgulayabilir ve bir uygulamanın paket adı hiçbir zaman değişmediğinden Twitter ve Facebook uygulamalarının paket adlarını filtreleyebilirsiniz. Sonra bu sonuçları özel bir iletişim kutusuna koyun.

Örneğin paket adı göre filtre olabilir böyle bir şey kullanma:

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

Teşekkürler sevgili Ken, Bu nedenle bu listeyi filtrelemek mümkün değildir. Önerinizi test edeceğim ve daha sonra sonucu anlatacağım. Tekrar teşekkürler. – 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(); 
     } 
    } 
İlgili konular