Android 卸载软件包

Android 卸载软件包,android,uninstallation,Android,Uninstallation,我想单独安装我的应用程序,但它会在SerialVersionUID上引发NullPointerException 不知道这里怎么了 public void UnInstallApplication() throws NameNotFoundException { Intent intent = new Intent(Intent.ACTION_DELETE, Uri.fromParts("package", getPackageManager().getPack

我想单独安装我的应用程序,但它会在SerialVersionUID上引发NullPointerException 不知道这里怎么了

public void UnInstallApplication() throws NameNotFoundException 
{
    Intent intent = new Intent(Intent.ACTION_DELETE, Uri.fromParts("package",
            getPackageManager().getPackageInfo("com.XXX.XXX", 0).packageName,null));
            startActivity(intent);
}
或者我在下面使用了这行代码(函数中插入了packagename),但结果相同

Intent uninstallIntent = new Intent(Intent.ACTION_DELETE);
    uninstallIntent.setData(Uri.parse("package:" + packagename));
    startActivity(uninstallIntent); 
使用此代码:

Uri packageURI = Uri.parse("package:your.packge.name");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);

第三方应用程序无法以编程方式安装或卸载任何其他软件包,这将给Android带来安全风险。然而,第三方应用程序可以要求Android操作系统使用intents安装或卸载软件包,此问题应提供更完整的信息:


我的错误是,我在扩展AsyncTask的类内的doinbackground上运行的函数上调用了我的卸载方法,因此我更改了调用方法,它提示我卸载我的应用程序。

1的答案与正确答案非常接近

我最近的应用程序验证了这些代码:

int REQUEST_UNINSTALL = 1;

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == REQUEST_UNINSTALL) {
  // 0 means success, other means failed.
  Log.d(TAG, "got result of uninstall: " + resultCode);
  }
}

void uninstallPackage() {
    Uri packageURI = Uri.parse("package:" + "com.android.xxxx");
    Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
    startActivityForResult(uninstallIntent, REQUEST_UNINSTALL);
}

onActivityResult
将获得卸载结果,卸载包将提示系统对话框,询问用户是否删除包。

您能否粘贴
NullPointerException
的全文?调试时引发的异常,在日志中不显示该异常,然后在调试器外部运行应用程序,因此,您可以在LogCat中获取堆栈跟踪,以便在此处进行检查或发布。当您调用从其他方法返回的对象的方法时,如果其中一个返回值为null,您将面临NPE的风险。不要像在可能出现故障的情况下那样将对象堆叠在一行上,而是为对象指定名称,以便测试它们是否为非空。getPackageInfo()的结果很可能为null,因为不存在具有您给出的规范(可能有点错误)的包。谢谢Chris的建议,我会试试你的话,但我已经硬编码了我的packagename(在清单中描述),并且我得到了null指针,我以前解决过很多NullPointerException问题,但这对我来说有点奇怪-1下次请阅读问题中的代码-要求Android开始卸载过程的意图正是我们正在尝试的。