添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

就是在创建文件夹的时候,不要自己去指定文件夹,而是采用系统指定给你的文件路径去进行存储。

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中进行注册

  1. <receiver android:name="com.digitalcq.maincity.util.Receiver" >

  2. <intent-filter>

  3. <action android:name="android.intent.action.PACKAGE_ADDED" />

  4. <action android:name="android.intent.action.PACKAGE_REMOVED" />

  5.  
  6. <data android:scheme="package" />

  7. </intent-filter>

  8. </receiver>


这里我同时监听了应用添加及应用卸载,可以按需要书写

PS:监听的是package的删除及添加,因为应用删除卸载时,package会删除添加

同时这里也可以在代码中注册,可以自行操作。

监听设置完毕,进行文件删除

1.)删除单个文件

删除文件相对来说比较简单就是我写在BroadcastReceiver 中的代码

2.)删除整个文件夹

这个操作因为我没有用,所以没有自行研究,以下是网上的代码

  1. /**

  2. * 删除文件夹以及目录下的文件

  3. * @param filePath 被删除目录的文件路径

  4. * @return 目录删除成功返回true,否则返回false

  5. */

  6. public boolean deleteDirectory(String filePath) {

  7. boolean flag = false;

  8. //如果filePath不以文件分隔符结尾,自动添加文件分隔符

  9. if (!filePath.endsWith(File.separator)) {

  10. filePath = filePath + File.separator;

  11. }

  12. File dirFile = new File(filePath);

  13. if (!dirFile.exists() || !dirFile.isDirectory()) {

  14. return false;

  15. }

  16. flag = true;

  17. File[] files = dirFile.listFiles();

  18. //遍历删除文件夹下的所有文件(包括子目录)

  19. for (int i = 0; i < files.length; i++) {

  20. if (files[i].isFile()) {

  21. //删除子文件

  22. flag = deleteFile(files[i].getAbsolutePath());

  23. if (!flag) break;

  24. } else {

  25. //删除子目录

  26. flag = deleteDirectory(files[i].getAbsolutePath());

  27. if (!flag) break;

  28. }

  29. }

  30. if (!flag) return false;

  31. //删除当前空目录

  32. return dirFile.delete();

  33. }

  34.  
  35. /**

  36. * 根据路径删除指定的目录或文件,无论存在与否

  37. *@param filePath 要删除的目录或文件

  38. *@return 删除成功返回 true,否则返回 false。

  39. */

  40. public boolean DeleteFolder(String filePath) {

  41. File file = new File(filePath);

  42. if (!file.exists()) {

  43. return false;

  44. } else {

  45. if (file.isFile()) {

  46. // 为文件时调用删除文件方法

  47. return deleteFile(filePath);

  48. } else {

  49. // 为目录时调用删除目录方法

  50. return deleteDirectory(filePath);

  51. }

  52. }

  53. }

到此就可以了

--------------------- 作者:Stanny_Bing 来源:CSDN 原文:https://blog.csdn.net/Stanny_Bing/article/details/50803470?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

其实,谷歌提供了方法可以让我们很便捷的在卸载应用的时候同时删除该应用的文件夹。就是在创建文件夹的时候,不要自己去指定文件夹,而是采用系统指定给你的文件路径去进行存储。 Context.getExternalFilesDir(String Type) 外部存储目录Context.getExternalCacheDir(String Type) 外部存储缓存目录...
方法如下:(可放工具类里使用) 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来处理安装及的过程的...
备注:手机系统应用都是在system系统目录下 ,ro 表示当前 system 是只读权限 所以要想删除系统应用需要把权限修改成 t 权限 才能进行操作 3 输入命令 su (可让一个普通用户切换为超级用户或其他用户,并可临时拥有所切换用户的权限) 4 输入命令 mount -o rw,remount -t auto /system (让system 变成可读模式) 5 输入命令 c. 所有Android设备都支持可以保存文件的共享外部存储器,这个外部存储器可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动)。外部存储器上的文件时全部可读的,当设备通过USB连接电脑和电脑互传文件时,外部存储器上的文件不可修改。 当外部存储器被挂到电脑上或被移除,文件android设备就不可见了,且此时外部存储器上的文件是没有安全保障的。所有程序都可以
首先内部存储路径为/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`。