Удалите мое приложение программно (Android)
Я хочу удалить приложение при нажатии кнопки. Для этого я использую следующий код.
Uri packageURI = Uri.parse("package:"+packageName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
Это дает мне результат, но я хочу удалить его напрямую, не нажимая кнопку "ОК" диалога с сообщением "Это приложение будет удалено".
Мне просто нужно удалить приложение напрямую.
Ответы
Ответ 1
Деинсталляция без подтверждения пользователя не разрешена сторонним приложениям.
Как указывает xDragonZ, корневой процесс может грубо сделать это, буквально удалив каталог и оставив диспетчер пакетов справиться с потерей, но это не очень широко развертываемое решение, поскольку AFAIK никакими устройствами не поставляется с этой возможностью для приложений для запуска собственного корневого вспомогательного процесса - это рискованная модификация послепродажного обслуживания.
Ответ 2
Да, можно удалить пакет на 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
}
}