您的位置:首页 > 移动开发 > Android开发

无需root,清除清理安卓,android的cache,缓存

2014-12-22 15:28 218 查看
[java] view
plaincopy

package com.agj.test;

import java.io.File;

import java.lang.reflect.Method;

import android.content.Context;

import android.content.pm.IPackageDataObserver;

import android.content.pm.PackageManager;

import android.os.Environment;

import android.os.RemoteException;

import android.os.StatFs;

/**

* 1.功能相当于,点击了 应用程序信息 里面的 清楚缓存按钮,而非 清除数据

*

* 2.功能相当于,删除了/data/data/packageName/cache 文件夹里面所有的东西

*

* 3.需要权限 <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />

*/

public class CacheClearHelper {

public static void clearCache(Context context) {

try {

PackageManager packageManager = context.getPackageManager();

Method localMethod = packageManager.getClass().getMethod("freeStorageAndNotify", Long.TYPE,

IPackageDataObserver.class);

Long localLong = Long.valueOf(getEnvironmentSize() - 1L);

Object[] arrayOfObject = new Object[2];

arrayOfObject[0] = localLong;

localMethod.invoke(packageManager, localLong, new IPackageDataObserver.Stub() {

@Override

public void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException {

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

private static long getEnvironmentSize() {

File localFile = Environment.getDataDirectory();

long l1;

if (localFile == null)

l1 = 0L;

while (true) {

String str = localFile.getPath();

StatFs localStatFs = new StatFs(str);

long l2 = localStatFs.getBlockSize();

l1 = localStatFs.getBlockCount() * l2;

return l1;

}

}

}

另外,IPackageDataObserver这个类找不到的话,那么就自己新建一个,建成如下的样子:



IPackageDataObserver.aidl的内容是:

/*

**

** Copyright 2007, The Android Open Source Project

**

** Licensed under the Apache License, Version 2.0 (the "License");

** you may not use this file except in compliance with the License.

** You may obtain a copy of the License at

**

** http://www.apache.org/licenses/LICENSE-2.0
**

** Unless required by applicable law or agreed to in writing, software

** distributed under the License is distributed on an "AS IS" BASIS,

** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

** See the License for the specific language governing permissions and

** limitations under the License.

*/

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: