2014-07-03 14 views
5

Ich versuche, das Ergebnis von Intent.createChooser zu erfassen, um zu wissen, welche App ein Benutzer für die Freigabe ausgewählt hat.Holen Sie sich App aus Intent.createChooser

Ich weiß, es habe viele Beiträge im Zusammenhang mit dieser gewesen:

aber diese Stellen sind etwas alt, und Ich hoffe, dass es neue Entwicklungen geben könnte.

Ich versuche ein share action zu implementieren, ohne dass es im Menü vorhanden sein muss. Die nächste Lösung für das, was ich will, wird von ClickClickClack bereitgestellt, die vorschlagen, eine benutzerdefinierte App-Auswahl implementieren, aber das scheint schwerfällig. Außerdem scheint es, als könnte es einige Android-Hooks geben, um die gewählte App zu bekommen, wie die ActivityChooserModel.OnChooseActivityListener.

Ich habe den folgenden Code in meiner MainActivity, aber die onShareTargetSelected Methode wird nie aufgerufen.

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

Antwort

2

Ich versuche, das Ergebnis von Intent.createChooser zu kennen zu erfassen, die ein Benutzer für die gemeinsame Nutzung ausgewählte App.

Das ist nicht möglich.

Andere "Auswahl" -Lösungen, wie ShareActionProvider, bieten möglicherweise mehr. Ich habe das Intent nicht überprüft, das an onShareTargetSelected() übergeben wird, um zu sehen, ob es das ComponentName des gewählten Ziels enthält, obwohl die Dokumente vorschlagen, dass es sollte.

Und, wenn es aus irgendeinem Grund nicht tut, können Sie versuchen, ShareActionProvider zu verzweigen, um die gewünschten Hooks hinzuzufügen.

Der Grund, warum createChooser() nicht auf diese Weise behandelt werden kann, ist einfach, weil das "Wählen" durch einen separaten Prozess von Ihrem erfolgt.

Ich habe den folgenden Code in meiner MainActivity, aber die OnShareTargetSelected-Methode wird nie aufgerufen.

ShareActionProvider geht in die Aktionsleiste. Sie können nicht einfach eine Instanz erstellen, ein paar Setter aufrufen und erwarten, dass etwas passiert.

+0

In Ordnung. Das ist enttäuschend und wird in den Dokumenten im ShareActionProvider nicht deutlich. – dsg

+0

Ich endete einfach mit dieser Lösung: http://StackOverflow.com/A/18980872/244526 – dsg

10

Ab API-Ebene 22 ist es jetzt tatsächlich möglich. In Android 5.1 wurde eine Methode (createChooser (Intent target, CharSequence title, IntentSender sender)) hinzugefügt, die es erlaubt, die Ergebnisse der Wahl des Benutzers zu empfangen. Wenn Sie einen IntentSender an createChooser angeben, wird der Absender durch den Auswahldialog mit dem vom Benutzer ausgewählten ComponentName benachrichtigt. Es wird in der extra genannten EXTRA_CHOSEN_COMPONENT int IntentSender das ist notified geliefert.

Verwandte Themen