gpt4 book ai didi

android - 如何从我们的 Android 应用程序中删除其他应用程序缓存?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:51 24 4
gpt4 key购买 nike

我正在尝试开发一个可以清除其他应用程序缓存数据的 Android 应用程序,我尝试浏览所有博客,但没有一个对我有用,我可以通过以下代码清除我的应用程序的缓存

File cache = getCacheDir();
File appDir = new File(cache.getParent());
if (appDir.exists())
{
String[] children = appDir.list();
for (String s : children)
{
if (!s.equals("lib"))
{
deleteDir(new File(appDir, s));
Toast.makeText(DroidCleaner.this, "Cache Cleaned", Toast.LENGTH_LONG).show();
Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
}
}
}

public static boolean deleteDir(File dir)
{
if (dir != null && dir.isDirectory())
{
String[] children = dir.list();
for (int i = 0; i < children.length; i++)
{
boolean success = deleteDir(new File(dir, children[i]));
if (!success)
{
return false;
}
}
}
return dir.delete();
}

我的 list 代码

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>

我在 2.2、2.3 和 4.0 上测试了代码

在看到以下链接中的帖子后 Android: Clear Cache of All Apps?

我将我的代码更改为

PackageManager  pm = getPackageManager();
// Get all methods on the PackageManager
Method[] methods = pm.getClass().getDeclaredMethods();
for (Method m : methods) {
if (m.getName().equals("freeStorage")) {
// Found the method I want to use
try {
long desiredFreeStorage = 8 * 1024 * 1024 * 1024; // Request for 8GB of free space
m.invoke(pm, desiredFreeStorage , null);
} catch (Exception e) {
// Method invocation failed. Could be a permission problem
}
break;
}
}

我想清除其他应用程序的缓存,任何人都可以帮助我,如果我错了请纠正我,在此先感谢。

最佳答案

API 23 不再支持此 API,即 Marshmallow。 Marshmallow 中已弃用权限。

但还有另一种方法,即请求附件 的运行时许可。试用应用 All-in-one Toolbox从游戏商店。即使在 Marshmallow 中,此应用程序也能够清除其他应用程序的缓存。那么我们应该可以这样做。

我正在研究这个。找到解决方案后,我将更新答案。谢谢。


OLD ANSWER IS AS FOLLOWS


我使用了下面的代码,现在我可以在没有 root 的情况下清除所有应用程序的缓存,它非常适合我,

private static final long CACHE_APP = Long.MAX_VALUE;
private CachePackageDataObserver mClearCacheObserver;

btnCache.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
clearCache();
}
});//End of btnCache Anonymous class

void clearCache()
{
if (mClearCacheObserver == null)
{
mClearCacheObserver=new CachePackageDataObserver();
}

PackageManager mPM=getPackageManager();

@SuppressWarnings("rawtypes")
final Class[] classes= { Long.TYPE, IPackageDataObserver.class };

Long localLong=Long.valueOf(CACHE_APP);

try
{
Method localMethod=
mPM.getClass().getMethod("freeStorageAndNotify", classes);

/*
* Start of inner try-catch block
*/
try
{
localMethod.invoke(mPM, localLong, mClearCacheObserver);
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvocationTargetException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* End of inner try-catch block
*/
}
catch (NoSuchMethodException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}//End of clearCache() method

private class CachePackageDataObserver extends IPackageDataObserver.Stub
{
public void onRemoveCompleted(String packageName, boolean succeeded)
{

}//End of onRemoveCompleted() method
}//End of CachePackageDataObserver instance inner class

同时在您的 src 文件夹中创建一个名为 android.content.pm 的包,在该包中创建一个名为 IPackageDataObserver.aidl< 的文件 并将以下代码粘贴到其中

package android.content.pm;

/**
* API for package data change related callbacks from the Package Manager.
* Some usage scenarios include deletion of cache directory, generate
* statistics related to code, data, cache usage(TODO)
* {@hide}
*/
oneway interface IPackageDataObserver {
void onRemoveCompleted(in String packageName, boolean succeeded);
}

并在您的 list 中确保您使用了以下代码

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>

如果你们发现任何问题,请随时与我联系,谢谢。

关于android - 如何从我们的 Android 应用程序中删除其他应用程序缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17313721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com