Java 应用程序choose上具有BroadcastReceiver调用活动的意向选择器
我正在使用意图选择器,我需要知道选择了哪一个可用的应用程序。为此,我在活动中创建了如下意图选择器:Java 应用程序choose上具有BroadcastReceiver调用活动的意向选择器,java,android,android-intent,broadcastreceiver,android-intent-chooser,Java,Android,Android Intent,Broadcastreceiver,Android Intent Chooser,我正在使用意图选择器,我需要知道选择了哪一个可用的应用程序。为此,我在活动中创建了如下意图选择器: List<Intent> targetedShareIntents = new ArrayList<>(); targetedShareIntents.add(intent1); targetedShareIntents.add(intent2); Intent receiver = new Intent(this, BReceiver.class); PendingInt
List<Intent> targetedShareIntents = new ArrayList<>();
targetedShareIntents.add(intent1);
targetedShareIntents.add(intent2);
Intent receiver = new Intent(this, BReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Choose an app", pendingIntent.getIntentSender());
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
这非常有效,但我需要广播接收器调用传递appName的主活动的方法。为此,我需要向接收方传递活动的引用,但是,由于我没有使用构造函数创建接收方,我不知道如何实现它。我需要这样的东西作为广播接收器的代码:
public class BReceiver extends BroadcastReceiver {
MainActivity activity;
@Override
public void onReceive(Context context, Intent intent) {
for (String key : Objects.requireNonNull(intent.getExtras()).keySet()) {
try {
ComponentName componentInfo = (ComponentName) intent.getExtras().get(key);
PackageManager packageManager = context.getPackageManager();
String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(componentInfo.getPackageName(), PackageManager.GET_META_DATA));
activity.appChosen(appName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class BReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
for (String key : Objects.requireNonNull(intent.getExtras()).keySet()) {
try {
ComponentName componentInfo = (ComponentName) intent.getExtras().get(key);
PackageManager packageManager = context.getPackageManager();
String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(componentInfo.getPackageName(), PackageManager.GET_META_DATA));
if(appName.equals("appX")){
// Do something
}
else if(appName.equals("appY")){
// Do something
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class BReceiver extends BroadcastReceiver {
MainActivity activity;
@Override
public void onReceive(Context context, Intent intent) {
for (String key : Objects.requireNonNull(intent.getExtras()).keySet()) {
try {
ComponentName componentInfo = (ComponentName) intent.getExtras().get(key);
PackageManager packageManager = context.getPackageManager();
String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(componentInfo.getPackageName(), PackageManager.GET_META_DATA));
activity.appChosen(appName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}