2014-07-03 9 views
5

Sto cercando di acquisire il risultato di Intent.createChooser per sapere quale app selezionata per la condivisione.Scarica l'app scelta da Intent.createChooser

So che ci sono stati un sacco di commenti su questo:

ma questi posti sono un po 'vecchi, e Spero che possano esserci nuovi sviluppi.

Sto cercando di implementare un share action senza che sia presente nel menu. La soluzione più vicina a ciò che voglio è fornita da ClickClickClack che suggerisce di implementare un selettore di app personalizzato, ma sembra pesante. Inoltre, sembra che potrebbero esserci alcuni ganci Android per ottenere l'app scelta, ad esempio lo ActivityChooserModel.OnChooseActivityListener.

Ho il seguente codice nel mio MainActivity, ma il metodo onShareTargetSelected non viene mai chiamato.

Intent sendIntent = new Intent(); 
    sendIntent.setAction(Intent.ACTION_SEND); 
    sendIntent.putExtra(Intent.EXTRA_TEXT, shareMessage()); 
    sendIntent.setType("text/plain"); 

    Intent intent = Intent.createChooser(sendIntent, getResources().getText(R.string.share_prompt)); 

    ShareActionProvider sap = new ShareActionProvider(this); 
    sap.setShareIntent(sendIntent); 
    sap.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() { 
     @Override 
     public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { 
      System.out.println("Success!!"); 
      return false; 
     } 
    }); 

    startActivityForResult(intent, 1); 

risposta

2

Sto cercando di catturare il risultato di Intent.createChooser per sapere quali app l'utente selezionato per la condivisione.

Questo non è possibile.

Altre soluzioni "di scelta", come ShareActionProvider, possono offrire di più. Non ho esaminato lo Intent consegnato a onShareTargetSelected() per vedere se contiene lo ComponentName della destinazione scelta, anche se i documenti suggeriscono che dovrebbe.

E, se per qualche motivo non lo fa, siete invitati a provare a biforcare ShareActionProvider per aggiungere i ganci che si desidera.

Il motivo per cui createChooser() non può essere gestito in questo modo è semplicemente perché la "scelta" viene eseguita da un processo separato dal tuo.

Ho il seguente codice nel mio MainActivity, ma il metodo onShareTargetSelected non viene mai chiamato.

ShareActionProvider entra nella barra delle azioni. Non puoi semplicemente creare un'istanza, chiamare un paio di setter e aspettarti che succeda qualcosa.

+0

OK. Questo è deludente, e non è chiaro dai documenti di ShareActionProvider. – dsg

+0

Ho finito con questa soluzione: http://stackoverflow.com/a/18980872/244526 – dsg

10

A partire dal livello API 22 ora è effettivamente possibile. In Android 5.1 è stato aggiunto un metodo (createChooser (Intent target, CharSequence title, IntentSender sender)) che consente di ricevere i risultati della scelta dell'utente. Quando si fornisce uno IntentSender a createChooser, il mittente verrà avvisato dalla finestra di dialogo di scelta con lo ComponentName scelto dall'utente. Sarà fornito nell'extra chiamato EXTRA_CHOSEN_COMPONENT int il IntentSender ovvero notified.

Problemi correlati