卸载包

时间:2012-12-15 14:58:46

标签: android uninstall

我想单独取消我的应用程序,但它会在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); 

4 个答案:

答案 0 :(得分:3)

使用此代码:

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

答案 1 :(得分:0)

第三方应用无法以编程方式安装或卸载任何其他软件包,这对Android来说是一个安全风险。但是,第三方应用可以要求Android操作系统使用意图安装或卸载软件包,这个问题应提供更完整的信息:

install / uninstall APKs programmatically (PackageManager vs Intents)

答案 2 :(得分:0)

我的错误是我在一个函数上调用我的卸载方法,该函数在一个扩展AsyncTask的类中的doinbackground上运行,所以我改变了我的调用方法,它促使我卸载了我的应用程序。

答案 3 :(得分:0)

#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将获得卸载结果,卸载包将提示系统对话框,询问用户是否删除了包。