Android 卸载应用程序
最近工作中接触Android应用实现卸载自身的逻辑,踩了一些坑之后整理下来。使用的方法是Intent.ACTION_DELETE,这里没有什么好说的。
MainActivity.java :
package com.example.uninstalldemo; import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button; public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE = 1;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button uninstallButton = findViewById(R.id.uninstall_button);
uninstallButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UninstallApk();
}
});
} private void UninstallApk() {
String packageName = getPackageName();
Log.d(TAG, "UninstallApk: "+packageName);
Uri packageURI = Uri.parse("package:" + packageName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivityForResult(uninstallIntent,REQUEST_CODE);
} @Override
public void onActivityResult(int requestCode,int resultCode,Intent data){
Log.d(TAG, "requestCode:" + String.valueOf(requestCode) + ", resultCode:" + String.valueOf(resultCode));
switch (requestCode){
case 1:
if(resultCode == RESULT_OK){
Log.d(TAG, "onActivityResult: executed"); //点击确定,为什么打印此行??
}else{
Log.d(TAG, "onActivityResult: executed in here**");//点击取消,打印此行。
}
break;
default:
break;
}
}
}
activity_main.xml中添加一个按钮,点击之后卸载应用程序apk.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:id="@+id/uninstall_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Uninstall"/> </LinearLayout>
最后,在Android 9中,完成上面的代码但是点击Uninstall无反应,找了很久答案,才知道在android 9中需要在添加权限,在AndroidManifest.xml添加:
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
运行程序,logcat信息如下:
2019-03-11 21:05:45.451 31622-31622/com.example.uninstalldemo D/MainActivity: UninstallApk: com.example.uninstalldemo
2019-03-11 21:05:48.827 31622-31622/com.example.uninstalldemo D/MainActivity: requestCode:1, resultCode:0
2019-03-11 21:05:48.827 31622-31622/com.example.uninstalldemo D/MainActivity: onActivityResult: executed in here**
点击确定删除不打印log信息,暂不知道为什么。

Android 卸载应用程序的更多相关文章
- Android利用广播监听设备安装和卸载应用程序
MainActivity如下: package cn.testappaddandremove; import android.os.Bundle; import android.app.Activit ...
- 使用Android SDK卸载厂家程序
ADB下载: 官网翻墙比较慢,这里推荐使用国内网站:https://www.androiddevtools.cn/ 下载 SDK Tools 和 SDK Platform-Tools: 两者分别 ...
- Android之——卸载应用程序
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47357729 不多说,不废话,直接上代码,大家都懂得 //卸载应用程序 //參数为 ...
- pc端和android端应用程序测试有什么区别?(ps面试题)
pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...
- 分享50款 Android 移动应用程序图标【下篇】
在这个移动程序流行的时代,持续增长的应用程序经济充满了商业机遇.任何对应用程序设计感兴趣的人,将会喜欢上这里的50个独特的 Android 应用程序图标.这些例子中的图标能够让应用程序的设计更具吸引力 ...
- 分享50款 Android 移动应用程序图标【上篇】
在这个移动程序流行的时代,持续增长的应用程序经济充满了商业机遇.任何对应用程序设计感兴趣的人,将会喜欢上这里的50个独特的 Android 应用程序图标.这些例子中的图标能够让应用程序的设计更具吸引力 ...
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...
- 解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法
APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...
- 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法
APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...
随机推荐
- hbase单点安装
系统环境:centos 6 软件包: hbase版本:hbase-1.4.8-bin.tar.gz 下载地址:wget http://mirror.bit.edu.cn/apache/hba ...
- 一篇文章彻底搞懂base64编码原理
开始 在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了解一下Base64的底层实现. base64是什么东东呢? Base64 ...
- mybatis的maven配置
<!-- mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId ...
- javascript 的垃圾回收机制讲一下
定义:指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束. 像 C 这样的编程语言,具有低级内存管理原语,如 malloc()和 free().开发人员使用这些原语显式地对操作系统的内存进行 ...
- pecl和pear 的区别和联系
Pear:是PHP的扩展代码包,所有的扩展均以PHP代码的形式出现,功能强大,安装简单,甚至可以改改就用.使用的时候,要在代码中进行Include才能够使用. Pecl:是PHP的标准扩展,可以补充实 ...
- VIM快速掌握
vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...
- Java并发包线程池之ThreadPoolExecutor
参数详解 ExecutorService的最通用的线程池实现,ThreadPoolExecutor是一个支持通过配置一些参数达到满足不同使用场景的线程池实现,通常通过Executors的工厂方法进行配 ...
- API的查看
步骤: 1. 双击打开API 2. 点击显示, 找到索引 3. 输入要查找的类名 , 敲击Enter两次 4. 看该类所属的包, java.lang包下的类,在使用的时候不需要导包 ,其他的都需要导包 ...
- 关于define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7));的理解
关于define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7));的理解 define('DISCUZ_ROOT', substr(dirname( ...
- Linux -- PHP-FPM的源码解析和模型
1.进程管理模式 PHP-FPM由1个master进程和N个worker进程组成.其中,Worker进程由master进程fork而来. PHP-FPM有3种worker进程管理模式. 1. Stat ...