如何在Android 9上以编程方式卸载应用程序?

时间:2018-12-22 12:05:02

标签: android

它对于较旧的android版本(在android 9之前)非常有效。但是在android 9上,我调用startActivity(intent)之后什么也没发生。

Intent intent=new Intent(Intent.ACTION_DELETE,Uri.fromParts("package",packageInfo.packageName,null));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

2 个答案:

答案 0 :(得分:1)

这在Android 6.0及更高版本中是可能的。 使您的应用成为设备所有者。

一旦您的应用获得了设备所有者的许可,我们便可以在没有任何用户干预的情况下以静默方式安装,卸载和更新。

您必须将android.permission.DELETE_PACKAGES添加到清单中,卸载才能工作

设备所有者api支持从Android 6.0及更高版本进行静默安装/卸载。

 public static boolean installPackage(Context context, InputStream in, String packageName)
    throws IOException {
PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
        PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
// set params
int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);
OutputStream out = session.openWrite("COSU", 0, -1);
byte[] buffer = new byte[65536];
int c;
while ((c = in.read(buffer)) != -1) {
    out.write(buffer, 0, c);
}
session.fsync(out);
in.close();
out.close();

session.commit(createIntentSender(context, sessionId));
return true;
}

 private static IntentSender createIntentSender(Context context, int sessionId) {
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                context,
                sessionId,
                new Intent(ACTION_INSTALL_COMPLETE),
                0);
        return pendingIntent.getIntentSender();
    }  

卸载

String appPackage = "com.your.app.package";
Intent intent = new Intent(getActivity(), getActivity().getClass());
PendingIntent sender = PendingIntent.getActivity(getActivity(), 0, intent, 0);
PackageInstaller mPackageInstaller = getActivity().getPackageManager().getPackageInstaller();
mPackageInstaller.uninstall(appPackage, sender.getIntentSe

答案 1 :(得分:-1)

查看了'Intent.java'类之后,我发现android 9需要将此权限插入到清单中:

android.permission.REQUEST_DELETE_PACKAGES

添加完此命令后,它就可以正常工作了:)!真的很失望,没有人回答这个简单的问题:(