android – 执行createChooser(context,intent,IntentSender)后不调用BroadcastReceiver

前端之家收集整理的这篇文章主要介绍了android – 执行createChooser(context,intent,IntentSender)后不调用BroadcastReceiver前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@

我想在我用createChooser()对话框呈现他之后检测用户选择的应用程序.所以我创建了我的BroadcastReceiver子类,如下所示:

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

我还将我的接收器添加到我的android清单文件中:

这是调用createChooser对话框的代码

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,receiverIntent,PendingIntent.FLAG_CANCEL_CURRENT);
    sendIntent = Intent.createChooser(sendIntent,"Share via...",pendingIntent.getIntentSender());
}
startActivity(sendIntent);

即使这是一个显式的PendingIntent,因为我直接使用ShareBroadcastReceiver类名而没有任何内联过滤器,我的广播接收器在用户点击选择器对话框后没有立即回调,我做错了什么?

最佳答案
代码中的一切都没问题.您只需要在ShareBroadcastReceiver中的onReceive方法中更改一行,以捕获Intent的“EXTRA_CHOSEN_COMPONENT”键:

Log.d(“INFORMATION”,“选择后收到的意图:”intent.getExtras().get(Intent.EXTRA_CHOSEN_COMPONENT));

在您的日志中,您将看到类似的内容(在我的情况下,我选择了Google Keep):

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

猜你在找的Android相关文章