2012-03-02 5 views
8

Nel mio progetto ho bisogno di condividere alcune informazioni in Solo Facebook e Twitter. Attualmente quando usi i seguenti codici, Android offre un elenco di tutti i social network che hai nel tuo cellulare.Android, come filtrare la condivisione sociale per avere solo Facebook e 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:")); 
} 

Il requisito è solo mostrare Facebook e Twitter in questa lista. È possibile filtrare questa lista per avere questi due?

enter image description here

+0

Forse non si può fare questo direttamente all'interno di un Intent, ma io credo che si possa implementare il proprio dialogo per farlo . – Huang

risposta

0

Non so se è questo che vuoi dire, ma è possibile utilizzare l'Android built-in menu di condivisione ...

È possibile condividere un URL per Facebook, Twitter, Gmail e altri (a patto che le applicazioni sono installate sul dispositivo) Intenti che utilizzano:

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

non dimenticate di inserire questo al 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> 

Spero che questo aiuti!

+2

Penso che intenda come non può avere Gmail e altre app lì, solo su Facebook e Twitter. –

+0

grazie caro Mike, questo codice è uguale al mio. Come menzionato da Ken, ho bisogno di filtrare la lista per avere solo quei due social network. – Hesam

3

È possibile eseguire una query per le attività che corrispondono all'intento e quindi filtrare i nomi dei pacchetti delle app di Twitter e Facebook poiché il nome del pacchetto di un'app non cambia mai. Quindi inserisci questi risultati in una finestra di dialogo personalizzata.

Usando qualcosa di simile si potrebbe filtrare i risultati in base al nome del pacchetto:

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

Grazie caro Ken, pertanto non è possibile filtrare l'elenco. Metterò alla prova il tuo suggerimento e più tardi ti dirò il risultato. Grazie ancora. – 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(); 
     } 
    } 
Problemi correlati