2016-11-14更新
其实,谷歌提供了方法可以让我们很便捷的在卸载应用的时候同时删除该应用的文件夹。
就是在创建文件夹的时候,不要自己去指定文件夹,而是采用系统指定给你的文件路径去进行存储。
Context.getExternalFilesDir(String Type) 外部存储目录
Context.getExternalCacheDir(String Type) 外部存储缓存目录
Context.getFilesDir 内部存储目录
Context.getCacheDir 内部存储缓存目录
通过这几个方法,可以获取,应用创建时,系统自动创建的文件目录,在卸载时,系统会自动删除文件夹。
推荐使用Context.getExternalFilesDir和 getExternalCacheDir
因为获取内部存储目录获取到的地址在android文件夹内是不可见的,会出现一系列的问题
//以下内容是使用监听,但不能针对所有手机,所以建议使用上面的方法
Android与IOS一个比较大的不同就是文件夹部分,IOS在卸载应用的时候会同时删除应用所创建的所有文件及文件夹,Android不会。
以下是执行这个操作的方法。
首先写一个广播接收器即BroadcastReceiver
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
String packageName = intent.getDataString();
Log.e("Test", "---------------" + "PACKAGE_REMOVED" + packageName);
File file1 = new File(CommonData.INI_DATABASE_PATH + "InfoData.sqlite");
if (file1.isFile()&&file1.exists()) {
file1.delete();
File file2 = new File(CommonData.INI_DATABASE_PATH + "InfoData.sqlite-journal");
if (file2.isFile()&&file2.exists()) {
file2.delete();
然后在Manifest中进行注册
<receiver android:name="com.digitalcq.maincity.util.Receiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
这里我同时监听了应用添加及应用卸载,可以按需要书写
PS:监听的是package的删除及添加,因为应用删除卸载时,package会删除添加
同时这里也可以在代码中注册,可以自行操作。
监听设置完毕,进行文件删除
1.)删除单个文件
删除文件相对来说比较简单就是我写在BroadcastReceiver 中的代码
2.)删除整个文件夹
这个操作因为我没有用,所以没有自行研究,以下是网上的代码
* 删除文件夹以及目录下的文件
* @param filePath 被删除目录的文件路径
* @return 目录删除成功返回true,否则返回false
public boolean deleteDirectory(String filePath) {
boolean flag = false;
//如果filePath不以文件分隔符结尾,自动添加文件分隔符
if (!filePath.endsWith(File.separator)) {
filePath = filePath + File.separator;
File dirFile = new File(filePath);
if (!dirFile.exists() || !dirFile.isDirectory()) {
return false;
flag = true;
File[] files = dirFile.listFiles();
//遍历删除文件夹下的所有文件(包括子目录)
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
//删除子文件
flag = deleteFile(files[i].getAbsolutePath());
if (!flag) break;
} else {
//删除子目录
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag) break;
if (!flag) return false;
//删除当前空目录
return dirFile.delete();
* 根据路径删除指定的目录或文件,无论存在与否
*@param filePath 要删除的目录或文件
*@return 删除成功返回 true,否则返回 false。
public boolean DeleteFolder(String filePath) {
File file = new File(filePath);
if (!file.exists()) {
return false;
} else {
if (file.isFile()) {
// 为文件时调用删除文件方法
return deleteFile(filePath);
} else {
// 为目录时调用删除目录方法
return deleteDirectory(filePath);
到此就可以了
Android与IOS一个比较大的不同就是文件夹部分,IOS在卸载应用的时候会同时删除应用所创建的所有文件及文件夹,Android不会。以下是执行这个操作的方法。首先写一个广播接收器即BroadcastReceiverpublic class Receiver extends BroadcastReceiver { @Override public void onReceive(
方法如下:(可放工具类里使用)
public static boolean deleteFile(String filePath) {
File file = new File(filePath);
if (file.isFile() && file.exists()) {
return file.delete();
return false;
常见的apk安装方式有三种:
系统自带的应用和厂商预装的应用. 没错, 系统自带的应用其实也是apk, 其安装是在系统首次启动时完成的. 这也就是为什么root后可以卸载系统自带应用.没有安装界面.
通过存储介质安装. 最常见的就是通过sd卡放置apk或者网上下载apk方式安装.通过 packageinstaller.apk来处理安装及卸载的过程的...
所有Android设备都支持可以保存文件的共享外部存储器,这个外部存储器可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动)。外部存储器上的文件时全部可读的,当设备通过USB连接电脑和电脑互传文件时,外部存储器上的文件不可修改。
当外部存储器被挂载到电脑上或被移除,文件对android设备就不可见了,且此时外部存储器上的文件是没有安全保障的。所有程序都可以
碌者劳其心力,懒人使用工具。程序员作为懒人推动社会进步,有目共睹。
adb 已提供了开发者可以使用的全部工具,但是重复执行一系列adb命令也令人心烦,所以,如果业务需求固定,直接在python脚
本执行adb命令。
核心代码很简单
cmd = 'adb shell'
os.system(cmd)
1.业务需求: 执行应用卸载及删除指定目录
Python学习交流Q群:906715085###
#!/usr/bin/python
import subprocess
import os, sys
备注:手机系统应用都是在system系统目录下 ,ro 表示当前 system 是只读权限 所以要想删除系统应用需要把权限修改成 t 权限 才能进行操作
3 输入命令 su (可让一个普通用户切换为超级用户或其他用户,并可临时拥有所切换用户的权限)
4 输入命令 mount -o rw,remount -t auto /system (让system 变成可读模式)
5 输入命令 c.
首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。
一、 files
1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
2. Context.openFileInput(...
public static boolean deleteFiles(File file) {
if (file == null || !file.exists()) {
return false;
* 删除指定目录下的文件及目录
public static deleteFolderFile(String filePath, boolean deleteThisPath){
if (!TextUtils.isEmpty(filePath)) {
File file = new File(filePath);
if (file.isDirectory()) {
File files[] = file.listFiles();
for (int i = 0; i < files.len.
做项目中发现,如果手动卸载安卓应用程序,会清除掉应用原来的数据,比如sqlite3数据库中的数据,为了避免用户卸载应用程序操作下,不会删掉原来的数据。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
String packageName = "com.example.app";
Intent intent = new Intent(Intent.ACTION_DELETE);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
其中,`packageName`是您想要卸载的应用程序包名称。这将启动系统的应用程序卸载屏幕,并在用户确认之后卸载应用程序。请注意,您需要在您的Android应用程序中获得适当的权限,例如`android.permission.DELETE_PACKAGES`。
Could not find common.jar (android.arch.core:common:1.0.0)/Failed to resolve :common解决办法
琼恩snow: