Как удалить кэш другого приложения?

Пытаюсь удалить кэш, не своего приложения, но когда смотрю в настройках, всё остаётся по старому. Насколько я понял, нужно найти в пакете приложения, папку /cache и удалить её, есть ли другие способы? Сейчас я достаю список установленных на телефоне приложений:

    private fun getListOfAppsInfo(activity: Activity, isAll: Int): MutableList<ApplicationInfo> {
        val appForReturnedList = mutableListOf<ApplicationInfo>()
        val appsInfoList: MutableList<ApplicationInfo> = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
            activity.packageManager.getInstalledApplications(PackageManager.GET_META_DATA)
        } else {
            val intent = Intent(Intent.ACTION_MAIN, null)
            intent.addCategory(Intent.CATEGORY_LAUNCHER)
            val arrayAppsNew = mutableListOf<ApplicationInfo>()
            val listAppsReturned = activity.packageManager.queryIntentActivities(intent, 0)
            listAppsReturned.forEach {
                arrayAppsNew.add(it.activityInfo.applicationInfo)
            }
            arrayAppsNew
        }
        val appsInstalled: MutableList<ApplicationInfo> = mutableListOf()
        val appsSystem: MutableList<ApplicationInfo> = mutableListOf()
        (appsInfoList.indices).forEach { i ->
//            if (appsInfoList[i].packageName != activity.packageName) {
                if (appsInfoList[i].flags and ApplicationInfo.FLAG_SYSTEM == 1) {
                    appsSystem.add(appsInfoList[i])
                } else {
                    appsInstalled.add(appsInfoList[i])
                    getPackagePathByPackageName(this, appsInfoList[i].packageName)
                }
//            }
        }

        when (isAll) {
            ALL_APPS -> {
                appForReturnedList.addAll(appsInstalled)
                appForReturnedList.addAll(appsSystem)
            }
            USER_APPS -> appForReturnedList.addAll(appsInstalled)
            SYSTEM_APPS -> appForReturnedList.addAll(appsSystem)
            else -> appForReturnedList.addAll(appsInstalled)
        }

        return appForReturnedList
    }
    private fun getAppsListInfo(activity: Activity, isAll: Int): ArrayList<String> {
        val appsArrayList: ArrayList<String> = ArrayList()

        for (app in getListOfAppsInfo(activity, isAll)) {
            appsArrayList.add(app.packageName)
        }

        return appsArrayList
    }

Затем по имени пакета нахожу путь к нужной папке, если такая есть:

    private fun getPackagePathByPackageName(activity: Activity, packageName: String): String {
        val packageManager = activity.packageManager
        var packagePath = packageName
        val packageInfo = packageManager.getPackageInfo(packagePath, 0)
        var appCacheDir = ""
        packagePath = packageInfo.applicationInfo.dataDir
        val dir = File("$packagePath/cache")
        if (dir.exists()) {
            appCacheDir = dir.absolutePath
        }
        return appCacheDir
    }

И удаляю:

    private fun deleteCache(context: Context, packagePathByPackageName: String) {
        try {
//            val dir: File = context.cacheDir
            val dir = File(packagePathByPackageName)
            deleteDir(dir)
        } catch (e: Exception) {
        }
    }

    private fun deleteDir(dir: File?): Boolean {
        return if (dir != null && dir.isDirectory) {
            dir.deleteRecursively()
            val children: Array<String> = dir.list()
            for (i in children.indices) {
                val success = deleteDir(File(dir, children[i]))
                if (!success) {
                    return false
                }
            }
            dir.deleteRecursively()
        } else if (dir != null && dir.isFile) {
            dir.deleteRecursively()
        } else {
            false
        }
    }

Но нечего не происходит, даже если подставляю путь, к своему приложению. Вот список разрешений:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACTION_MANAGE_WRITE_SETTINGS " />
<uses-permission
        android:name="android.permission.CLEAR_APP_CACHE"
        tools:ignore="ProtectedPermissions" />
<uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission
        android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />
<uses-permission
        android:name="android.permission.GET_PACKAGE_SIZE"
        tools:ignore="ProtectedPermissions" />

<queries>
        <package android:name="QUERY_ALL_PACKAGES" />
        <package android:name="com.android.settings" />

        <intent>
            <action android:name="android.intent.action.MAIN" />
        </intent>
        <intent>
            <action android:name="android.intent.action.VIEW" />
        </intent>
        <intent>
            <action android:name="android.intent.action.POWER_USAGE_SUMMARY" />
        </intent>
        <intent>
            <action android:name="android.intent.action.SEND" />
        </intent>
</queries>

И запрашиваю разрешения READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, может каких-то не хватает? Или этого вообще нельзя сделать, вроде как исходя из этого https://developer.android.com/training/data-storage/app-specific после апи 29+ нельзя получить такой доступ. Тестировал на телефоне 30+ и папки с кэшом действительно не видны, на 21+ видны но ничего не удаляет, на эмуляторах тоже самое. Подскажите пожалуйста, можно ли это вообще сделать, если да, то что я делаю не правильно?


Ответы (0 шт):