我想在点击按钮时卸载我的应用程序。为此,我使用以下代码。
Uri packageURI = Uri.parse("package:"+packageName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
它给了我结果,但我想直接删除而不点击" Ok"带有消息&#34的对话框按钮;此应用程序将被卸载"。
我只想直接卸载应用程序。
答案 0 :(得分:11)
不允许在没有用户确认的情况下卸载第三方应用程序。
正如xDragonZ指出的那样,根进程可以粗略地删除目录并让程序包管理器处理丢失,但这不是一个可广泛部署的解决方案,因为AFAIK没有设备附带该应用程序功能运行他们自己的根帮助程序 - 这是一个有风险的售后修改。
答案 1 :(得分:1)
您应该首先查看Android本机PackageInstaller。我建议您更新所有使用的代码。
下一步是检查PackageInstaller,这是一个普通的类。您将在其中找到uninstall
函数。坏消息是,这需要Manifest.permission.DELETE_PACKAGES
权限,并且仅授予系统应用程序。这意味着它不能直接供其他开发人员使用。但是我们可以使用设备所有者的权限来访问它。
这需要:
通常DELETE_PACKAGES
权限说:
允许应用程序删除软件包。
不供第三方应用程序使用。
一旦您的应用获得了设备所有者的许可,就可以像这样卸载软件包:
String appPackage = "com.your.app.package";
Intent intent = new Intent(getApplicationContext(),
getApplicationContext().getClass()); //getActivity() is undefined!
PendingIntent sender = PendingIntent.getActivity(getActivity(), 0, intent, 0);
PackageInstaller mPackageInstaller =
getActivity().getPackageManager().getPackageInstaller();
mPackageInstaller.uninstall(appPackage, sender.getIntentSender());
此处使用的代码:
PackageInstaller "Silent install and uninstall of apps by Device Owner” - Android M Preview
答案 2 :(得分:0)
是的,可以在Android中卸载软件包。此外,您还可以跳过要求用户在卸载屏幕上按OK按钮。您可以使用Android中的辅助功能服务来完成此操作。
public class MyAccessibilityService extends AccessibilityService {
private static final String TAG = MyAccessibilityService.class
.getSimpleName();
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.i(TAG, "ACC::onAccessibilityEvent: " + event.getEventType());
//TYPE_WINDOW_STATE_CHANGED == 32
if (AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED == event
.getEventType()) {
AccessibilityNodeInfo nodeInfo = event.getSource();
Log.i(TAG, "ACC::onAccessibilityEvent: nodeInfo=" + nodeInfo);
if (nodeInfo == null) {
return;
}
List<AccessibilityNodeInfo> list = nodeInfo
.findAccessibilityNodeInfosByViewId("com.android.settings:id/left_button");
for (AccessibilityNodeInfo node : list) {
Log.i(TAG, "ACC::onAccessibilityEvent: left_button " + node);
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
list = nodeInfo
.findAccessibilityNodeInfosByViewId("android:id/button1");
for (AccessibilityNodeInfo node : list) {
Log.i(TAG, "ACC::onAccessibilityEvent: button1 " + node);
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
@Override
public void onServiceConnected() {
Log.i(TAG, "ACC::onServiceConnected: ");
}
@Override
public void onInterrupt() {
// TODO Auto-generated method stub
}
}