Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序choose上具有BroadcastReceiver调用活动的意向选择器_Java_Android_Android Intent_Broadcastreceiver_Android Intent Chooser - Fatal编程技术网

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