执行 createChooser(context,intent,IntentSender) 后不调用 BroadcastReceiver
BroadcastReceiver is not called after createChooser(context,intent,IntentSender) is executed
我想检测用户在向他显示 createChooser() 对话框后选择的应用程序。所以我创建了我的 BroadcastReceiver
subclass 这样的:
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 清单 文件中:
<application>
...
...
...
<receiver android:name=".helpers.ShareBroadcastReceiver" android:exported="true"/>
</application>
下面是调用 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, 0, receiverIntent, PendingIntent.FLAG_CANCEL_CURRENT);
sendIntent = Intent.createChooser(sendIntent,"Share via...", pendingIntent.getIntentSender());
}
startActivity(sendIntent);
即使这是一个明确的 PendingIntent
因为我直接使用 ShareBroadcastReceiver
class 名称而没有任何 intent-filter
,我的广播接收器不会在之后立即回调用户点击选择器对话框,我做错了什么?
你的代码一切正常。您只需要更改 ShareBroadcastReceiver
中的 onReceive
方法中的一行即可捕获 Intent 的 "EXTRA_CHOSEN_COMPONENT" 键:
Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().get(Intent.EXTRA_CHOSEN_COMPONENT));
在你的日志中你会看到这样的东西(在我的例子中我选择了 Google 保留):
ComponentInfo{com.google.android.keep/com.google.android.keep.activities.ShareReceiverActivity}
我想检测用户在向他显示 createChooser() 对话框后选择的应用程序。所以我创建了我的 BroadcastReceiver
subclass 这样的:
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 清单 文件中:
<application>
...
...
...
<receiver android:name=".helpers.ShareBroadcastReceiver" android:exported="true"/>
</application>
下面是调用 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, 0, receiverIntent, PendingIntent.FLAG_CANCEL_CURRENT);
sendIntent = Intent.createChooser(sendIntent,"Share via...", pendingIntent.getIntentSender());
}
startActivity(sendIntent);
即使这是一个明确的 PendingIntent
因为我直接使用 ShareBroadcastReceiver
class 名称而没有任何 intent-filter
,我的广播接收器不会在之后立即回调用户点击选择器对话框,我做错了什么?
你的代码一切正常。您只需要更改 ShareBroadcastReceiver
中的 onReceive
方法中的一行即可捕获 Intent 的 "EXTRA_CHOSEN_COMPONENT" 键:
Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().get(Intent.EXTRA_CHOSEN_COMPONENT));
在你的日志中你会看到这样的东西(在我的例子中我选择了 Google 保留):
ComponentInfo{com.google.android.keep/com.google.android.keep.activities.ShareReceiverActivity}