我正在使用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
}
}
}
}
如何将应用程序名称传递给此广播接收器?
更新
我最终只使用了一个不是我完全想要的成员变量,但是它可以工作。
答案 0 :(得分:0)
如何将应用程序名称传递给此广播接收器?
PackageManager
,在其中向构造函数提供PackageManager
BroadcastReceiver
收集所需信息吗?startActivity()
BroadcastReceiver
的实例
onReceive()
上保留该对象,以便在收到广播后立即取消注册BroadcastReceiver
确认接收到的广播是针对它正在跟踪的程序包的,如采用此计划,您在任何时间点都会有2个以上未完成的Map
个对象还有其他可能的方法来组织此数据(例如,将包名{{1}}整理成数据,因此您只需要一个接收者),但是它们都遵循相同的思路:在收集数据之前,先收集所需的数据卸载,以便在接收广播时拥有数据。