Android 在安卓系统中以静默方式卸载应用程序?

Android 在安卓系统中以静默方式卸载应用程序?,android,uninstallation,Android,Uninstallation,我想以静默方式从设备中删除应用程序。 我正在尝试这段代码,但出现异常“用户10051和当前进程都没有android.permission.DELETE\u包。” class PackageInstallObserver扩展了IPackageInstallObserver.Stub{ public void packageInstalled(字符串packageName,int returnCode)引发RemoteException{ if(onInstalledPackaged!=null){

我想以静默方式从设备中删除应用程序。 我正在尝试这段代码,但出现异常“用户10051和当前进程都没有android.permission.DELETE\u包。”

class PackageInstallObserver扩展了IPackageInstallObserver.Stub{
public void packageInstalled(字符串packageName,int returnCode)引发RemoteException{
if(onInstalledPackaged!=null){
onInstalledPackaged.packageInstalled(packageName,返回代码);
}
}
}
类PackageDeleteObserver扩展了IPackageDeleteObserver.Stub{
public void packageDeleted(字符串packageName,int returnCode)引发RemoteException{
/*if(onInstalledPackaged!=null){
onInstalledPackaged.packageInstalled(packageName,返回代码);
}*/
}
}
公共应用程序管理器(上下文)抛出SecurityException,NoSuchMethodException{
observer=新包installobserver();
observerdelete=新的PackageDeleteObserver();
pm=context.getPackageManager();
类[]类型=新类[]{Uri.Class,IPackageInstallObserver.Class,int.Class,String.Class};
类[]卸载类型=新类[]{String.Class,IPackageDeleteObserver.Class,int.Class};
方法=pm.getClass().getMethod(“installPackage”,类型);
uninstallmethod=pm.getClass().getMethod(“deletePackage”,uninstalltypes);
}
公共无效设置OnInstalledPackaged(OnInstalledPackaged OnInstalledPackaged){
this.oninstalledpackage=oninstalledpackage;
}
public void卸载包(字符串packagename)抛出IllegalArgumentException、IllegalAccessException、InvocationTargetException{
调用(pm,新对象[]{packagename,observerdelete,0});
}

SDK应用程序不能具有
DELETE\u包
权限,除非它们是固件的一部分。这意味着未使用固件编译的应用程序没有/获取以静默方式删除应用程序的权利


查看更多信息。

无法通过编程方式以静默方式删除Android应用程序

你能做的最好的事情就是在对话框中要求用户删除应用程序。当他按下“OK”键时,重定向到指向该应用程序的卸载程序应用程序。如果用户希望完成删除操作,这仍然是用户的选择

有一种方法可以坚持让用户完成删除操作,但这种方法相当乐观。关闭卸载程序应用程序后,他将返回到您在
onActivityResult()
中的活动。您可以检查应用程序是否已删除。如果尚未删除,您可以返回同一对话框,再次要求他删除该应用程序。如果您选择直到用户最终删除应用程序或停止使用您的主应用程序(即,您告诉用户在他删除另一个应用程序之前,他不能使用您的应用程序),您可以继续此无休止的循环

如何检查应用程序是否已安装

final String packageName = "com.company.other-app-name";
android.content.pm.PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(packageName, 0);
Uri uri = Uri.parse("package:com.company.other-app-name");
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
startActivityForResult(intent, REQUEST_CODE_UNINSTALL_FREE_APP);
如果抛出
info==null
NameNotFoundException
,则该应用程序未安装

如何启动指向应用程序的卸载程序

final String packageName = "com.company.other-app-name";
android.content.pm.PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(packageName, 0);
Uri uri = Uri.parse("package:com.company.other-app-name");
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
startActivityForResult(intent, REQUEST_CODE_UNINSTALL_FREE_APP);

像“批量卸载程序”这样的应用程序如何在不需要系统应用程序的情况下工作?他们是否真的执行了取消销售所需的相同操作,而不是使用“adb卸载”?这是从“播放存储”页面开始的“只有ROOT电话或具有ROOT权限的电话才能执行静默卸载,该卸载不会弹出任何对话框,无需重复确认。只需轻触即可批量卸载。没有ROOT的手机需要在系统界面中反复选择。“好的,这是可能的。但是,由于某些原因,即使您有ROOT,也无法获得某些权限,例如切换GPS。“如果info==null…”不是真的,则getPackageInfo永远不会返回null。