4

Ich möchte erkennen, welche App der Benutzer auswählt, nachdem ich ihn mit einem createChooser() Dialog angezeigt habe. So habe ich erstellt meine BroadcastReceiver Unterklasse wie folgt aus:BroadcastReceiver wird nicht aufgerufen, nachdem createChooser (context, intent, IntentSender) ausgeführt wurde

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class ShareBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().toString()); 
    } 
} 

Auch ich habe meinen Receiver zu meinem Android manifest Datei hinzugefügt:

<application> 
... 
... 
... 
    <receiver android:name=".helpers.ShareBroadcastReceiver" android:exported="true"/> 
</application> 

Und hier ist der Code, der die createChooser ruft Dialog:

Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND); 
sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
sendIntent.setType("image/png"); 

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) { 
    Log.d("INFORMATION", "The current android version allow us to know what app is chosen by the user."); 

    Intent receiverIntent = new Intent(this,ShareBroadcastReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiverIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
    sendIntent = Intent.createChooser(sendIntent,"Share via...", pendingIntent.getIntentSender()); 
} 
startActivity(sendIntent); 

Auch wenn dies eine explizite PendingIntent, weil ich den Klassennamen ShareBroadcastReceiver direkt ohne intent-filter verwende, wird mein Broadcast-Empfänger nicht direkt nach dem Klicken auf den Auswahldialog zurückgerufen, was mache ich falsch?

Antwort

3

In Ihrem Code ist alles in Ordnung. Sie brauchen nur in Ihrer ShareBroadcastReceiver eine Zeile in onReceive Methode ändern, um die „EXTRA_CHOSEN_COMPONENT“ Taste Ihrer Absicht zu fangen:

Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().get(Intent.EXTRA_CHOSEN_COMPONENT));

In Ihrem Protokoll werden Sie etwas sehen (in meinem Fall wählte ich Google Keep):

ComponentInfo{com.google.android.keep/com.google.android.keep.activities.ShareReceiverActivity} 
Verwandte Themen