Проблема в том, что мое приложение получает права администратора, чтобы получить их, из UI POV довольно просто. Однако, как только приложение имеет эти права, громоздко удалить его (пользователь должен сначала отменить эти права администратора, а если нет, при удалении нет информации о том, что происходит с деинсталляцией - по крайней мере, в Ace 2 Android 2.3).
Таким образом, было бы полезно иметь функцию удаления в приложении - сначала отменили права администратора, а затем выполнили обычную деинсталляцию.
Другим подходом будет уведомление о том, что приложение вот-вот будет удалено, однако AFAIK это невозможно - см.: http://code.google.com/p/android/issues/detail?can=2&q=33315&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&id=33315
До сих пор я пришел только с обходным решением - чтобы сохранить проблему пользователя, добавьте кнопку "clear for uninstall" с информацией о состоянии, если приложение готово к удалению. Но тогда пользователь должен сделать еще один шаг по удалению моего приложения. В любом случае, хлопотно.
Итак - как удалить себя?
Решение
Просто ради сохранения кода на SO-сайте:
Uri packageURI = Uri.parse("package:"+MyMainActivity.class.getPackage().getName());
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
код скопирован из Android Tales Blog.