2013-01-22 11 views
10

Semplicemente desidera condividere una stringa di testo dinamica + l'URL dell'app. L'intento di condivisione nativo di Android è configurato correttamente e funziona perfettamente con Twitter, Gmail, ecc. Ma, come molti suppongono, non funziona con Facebook. Appare perché Facebook non accetterà il testo nel campo intent.EXTRA_TEXT, solo un singolo URL.Separazione degli extra Intent di condivisione Android in base al metodo scelto per la condivisione

Bene, la mia domanda è: esiste un modo per separare gli extra di intenti di condivisione in base al metodo che scelgono di condividere? ad esempio, se condividono tramite Gmail o Twitter, utilizzare l'esistente String + URL (l'opzione desiderata) EXTRA_TEXT, ma se scelgono di condividere tramite Facebook, utilizzare solo un URL come EXTRA_TEXT.

Non proprio volendo implementare l'SDK Android di Facebook per un compito così semplice che è integrato nativamente in Android.

Apprezza il tuo tempo e i tuoi consigli.

provato qualcosa di simile, ma non riesce, ovviamente, perché il suo solo controllare se esiste l'opzione di condivisione (quando la quota si apre, non dopo aver fatto clic un metodo di condivisione), non risponde quando scelgono un metodo.

String shareBody = "app string text " + act_txt + " more text! Get the app at http://www.appurl.com"; 

PackageManager pm = view.getContext().getPackageManager(); 
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0); 
    for(final ResolveInfo app : activityList) { 
     Log.i(TAG, "app.actinfo.name: " + app.activityInfo.name); 
     //if((app.activityInfo.name).contains("facebook")) { 
       if("com.facebook.katana.ShareLinkActivity".equals(app.activityInfo.name)) { 


      sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://www.appurl.com"); 
      startActivity(Intent.createChooser(sharingIntent, "Share idea")); 
      break; 
     } else { 
      sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "app name"); 
      sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); 
      startActivity(Intent.createChooser(sharingIntent, "Share")); 
      break; 
     } 
    } 

risposta

17

trovato una soluzione, su questo SO questione chiedendo per qualcos'altro: https://stackoverflow.com/a/8550043/1938669

il tentativo inviato la mia domanda originale qui era vicino. all'interno di quel ciclo di possibile shareIntent List, è necessario creare un nuovo intento di condivisione mirato alla specifica scelta di condivisione (come Facebook o Twitter)

ecco una soluzione finale che condivide solo un URL se si sceglie facebook, altrimenti condivide la stringa di testo completa + url:

public void shareIt(View view){ 
    //sharing implementation 
    List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
    sharingIntent.setType("text/plain"); 
    String shareBody = "string of text " + txt_var + " more text! Get the app at http://someapp.com"; 

    PackageManager pm = view.getContext().getPackageManager(); 
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0); 
    for(final ResolveInfo app : activityList) { 

     String packageName = app.activityInfo.packageName; 
     Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND); 
     targetedShareIntent.setType("text/plain"); 
     targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "share"); 
     if(TextUtils.equals(packageName, "com.facebook.katana")){ 
      targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://someurl.com"); 
     } else { 
      targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); 
     } 

     targetedShareIntent.setPackage(packageName); 
     targetedShareIntents.add(targetedShareIntent); 

    } 

    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share Idea"); 

    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); 
    startActivity(chooserIntent); 

} 
+3

perché rimuovere (0) da targetedShareIntents –

Problemi correlati