BroadcastReceiver is not called after createChooser(context,intent,IntentSender) is executed

早过忘川 提交于 2019-12-10 14:13:55

问题


I want to detect what app the user selects after I present him with a createChooser() dialog. So I have created my BroadcastReceiver subclass like this:

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

Also I have added my receiver to my android manifest file:

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

And here is the code that is calling the createChooser 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);

Even though this is an explicit PendingIntent because I am using the ShareBroadcastReceiver class name directly without anyintent-filter, my broadcast receiver is not being callback right after the user clicks on the chooser dialog, what am I doing wrong?


回答1:


Everything is alright in your code. You only need to change one line in onReceive method in your ShareBroadcastReceiver to catch the "EXTRA_CHOSEN_COMPONENT" key of your Intent:

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

In your log you will see something like this (in my case I chose Google Keep):

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


来源:https://stackoverflow.com/questions/39406073/broadcastreceiver-is-not-called-after-createchoosercontext-intent-intentsender

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!