应用程序上具有BroadcastReceiver调用活动的Intent选择器

问题描述

我正在使用一个意图选择器,我需要知道选择了哪个可用应用程序。为此,在我的活动中,我会像这样创建意图选择器:

List<Intent> targetedShareIntents = new ArrayList<>();
targetedShareIntents.add(intent1);
targetedShareIntents.add(intent2);
Intent receiver = new Intent(this,BReceiver.class);
PendingIntent pendingIntent = PendingIntent.getbroadcast(this,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);

我以此方式在清单中注册广播接收器:

<receiver android:name=".BReceiver" android:exported="false"/>

这是我用来了解所选应用程序名称的广播接收器的代码

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

这很好用,但我需要广播接收者通过appName调用主要活动的方法。为此,我需要将活动的引用传递给接收者,但是由于我没有使用构造函数创建接收者,因此我不知道该如何实现。我需要这样的东西作为广播接收器的代码

public class BReceiver extends broadcastReceiver {
    MainActivity activity;
    @Override
    public void onReceive(Context context,PackageManager.GET_Meta_DATA));
                activity.appChosen(appName);
            } catch (Exception e) {
                e.printstacktrace();
            }
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)