【问题标题】:Pass string information from Fragment to BroadcastReceiver将字符串信息从 Fragment 传递到 BroadcastReceiver
【发布时间】:2018-07-18 21:01:33
【问题描述】:

我正在使用ACTION_UNINSTALL_PACKAGE 卸载软件包,并尝试在删除后检索已删除软件包的应用程序名称。我似乎只能得到包名。我不能在包名上使用ApplicationInfo,因为包已经消失了。我尝试将值传递给意图,但由于它转到不属于我的另一个活动UninstallerActivity 它不存在。我不知道如何将字符串传递到 IntentFilter 数据字段,因为我需要将它用于包名称。我没有使用sendBroadcast,所以我不能使用它。

@Override
        public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
            intent.setData(Uri.parse("package:"+packageName));
            intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
            intentFilter.addDataScheme("package");

            mContext.registerReceiver(mUninstallReceiver, intentFilter);
            startActivity(intent);
}

private BroadcastReceiver mUninstallReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
    final String action = intent.getAction();

    if (action != null) {

        if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
           Uri intentData = intent.getData();
           //the above only contains package name
        }
    }
 }
}

如何将应用程序名称传递给此广播接收器?

更新

我最终只使用了一个成员变量,这不是我完全想要的,但它确实有效。

【问题讨论】:

    标签: android android-fragments broadcastreceiver


    【解决方案1】:

    如何将应用程序名称传递给此广播接收器?

    • 定义您自己的 BroadcastReceiver 的自定义子类,在其中向构造函数提供 PackageManager
    • 让构造函数从PackageManager 收集它需要的任何信息
    • 创建BroadcastReceiver 的实例之前 你调用startActivity()
    • 在某处按住 BroadcastReceiver 对象,以便在收到广播后立即取消注册
    • 如果用户有可能在第一次卸载完成之前要求卸载 2 个以上的应用程序,请让onReceive() 确认它收到的广播是针对它正在跟踪的包的,与此计划一样,您将拥有2+ BroadcastReceiver 在任何时间点未完成的对象

    还有其他可能的组织方式(例如,Map 将包名称转换为数据,因此您只需要一个接收器),但它们都遵循相同的路线:在卸载之前收集您需要的数据,以便您在收到广播时获得数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多