android数据截取,Android获取/清除应用数据

代码片段:

import java.lang.reflect.Method;

import android.content.Context;

import android.content.pm.IPackageDataObserver;

import android.content.pm.IPackageManager;

import android.content.pm.IPackageStatsObserver;

import android.content.pm.PackageManager;

import android.content.pm.PackageStats;

import android.os.RemoteException;

import android.os.ServiceManager;

import android.util.Log;

public class CacheUtils {

private static final String TAG = CacheUtils.class.getSimpleName();

private final long MAX_WAIT_TIME = 60 * 1000;

private final long WAIT_TIME_INCR = 10 * 1000;

/**

* 获取应用数据大小 cache + data

*

* @param context

* @param packageName

* @return

* @throws Exception

*/

public long getApplicationCache(Context context, String packageName) throws Exception {

try {

PackageStatsObserver observer = new PackageStatsObserver();

// wait on observer

synchronized (observer) {

Method method = PackageManager.class.getMethod("getPackageSizeInfo", new Class[] { String.class, IPackageStatsObserver.class });

method.invoke(context.getPackageManager(), packageName, observer);

// getPm().getPackageSizeInfo(packageName, UserHandle.myUserId(), observer);

long waitTime = 0;

while ((!observer.isDone()) || (waitTime > MAX_WAIT_TIME)) {

observer.wait(WAIT_TIME_INCR);

waitTime += WAIT_TIME_INCR;

}

if (!observer.isDone()) {

throw new Exception("Timed out waiting for PackageStatsObserver.onGetStatsCompleted");

}

}

Log.d(TAG, "toString " + observer.stats.toString());

return observer.stats.dataSize + observer.stats.cacheSize;

} catch (RemoteException e) {

Log.w(TAG, "Failed to get handle for PackageManger Exception: " + e);

return -1;

} catch (InterruptedException e) {

Log.w(TAG, "InterruptedException :" + e);

return -1;

}

}

/**

* 清除应用数据

*

* @param context

* @param packageName

* @return

* @throws Exception

*/

public boolean cleanApplicationUserData(Context context, String packageName) throws Exception {

try {

PackageDataObserver observer = new PackageDataObserver();

// wait on observer

synchronized (observer) {

Method method = PackageManager.class.getMethod("clearApplicationUserData", new Class[] { String.class, IPackageDataObserver.class });

method.invoke(context.getPackageManager(), packageName, observer);

// getPm().deleteApplicationCacheFiles(appid, observer);

long waitTime = 0;

while (!observer.isDone() || (waitTime > MAX_WAIT_TIME)) {

observer.wait(WAIT_TIME_INCR);

waitTime += WAIT_TIME_INCR;

}

if (!observer.isDone()) {

throw new Exception("timed out waiting for PackageDataObserver.onRemoveCompleted");

}

}

Log.d(TAG, "cleanApplicationCache " + observer.retValue);

return observer.retValue;

} catch (RemoteException e) {

Log.w(TAG, "Failed to get handle for PackageManger Exception: " + e);

return false;

} catch (InterruptedException e) {

Log.w(TAG, "InterruptedException :" + e);

return false;

}

}

private IPackageManager getPm() {

return IPackageManager.Stub.asInterface(ServiceManager.getService("package"));

}

class PackageDataObserver extends IPackageDataObserver.Stub {

public boolean retValue = false;

private boolean doneFlag = false;

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

synchronized (this) {

retValue = succeeded;

doneFlag = true;

notifyAll();

}

}

public boolean isDone() {

return doneFlag;

}

}

class PackageStatsObserver extends IPackageStatsObserver.Stub {

public boolean retValue = false;

public PackageStats stats;

private boolean doneFlag = false;

public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {

synchronized (this) {

retValue = succeeded;

stats = pStats;

doneFlag = true;

notifyAll();

}

}

public boolean isDone() {

return doneFlag;

}

}

}

AndroidManifest权限要求:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值