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

我想在我用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清单文件中:

broadcastReceiver" android:exported="true"/>

这是调用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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...