当用户在设备上卸载应用程序时,我有以下广播接收器来捕获事件,从技术上讲,我正在接收带有动作ACTION_PACKAGE_REMOVED的意图:
public class appUninstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
if (intent != null) {
if (intent.getAction().equals(intent.ACTION_PACKAGE_REMOVED)) {
try {
String packageName = intent.getData().toString();
//Logcat shows the packageName is "com.XXX.YYY"
Log.v("debug",packageName);
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
//Got NameNotFoundException
Log.v("debug",packageInfo.versionName);
}catch(NameNotFoundException e){
e.printStackTrace();
}
}
}
}
}
上面的接收器运行良好,只是当它尝试使用 提取卸载应用程序(包)的版本名称时packageInfo.versionName
,NameNotFoundException正在上升。
我得到的packageName
是“com.XXX.YYY”,这正是我要卸载的应用程序的包名。但是为什么我无法使用上面的代码获取版本名称?
(对了,上面的receiver是app卸载开始的时候触发的,是不是因为开始卸载之前系统已经移除了metadata?)