하지만
표시되는 안드로이드 프로그램 런타임에서이를 발행하는 경우이 작동하지 않습니다 내 이전에 question에 관해서
브라우저 캐시를 백그라운드에서 실행하는 서비스를 사용하여 브라우저 캐시를 지속적으로 지워야하는 경우 일시적인 해결 방법이지만 "android.content.pm.IPackageDataObserver"로 수행 할 수 있습니다. 다음은 해당 서비스를 찾는 것입니다. 괜찮습니다.
import java.util.List;
import android.app.PendingIntent;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
import android.os.Handler;
import android.os.IBinder;
public class CacheCleanerService extends Service {
public static final String REFRESH_INTENT="tritop.android.slwcachecleanerwidget.REFRESH";
public static final String CLEAR_INTENT="tritop.android.slwcachecleanerwidget.CLEAR";
public static final long RECOUNTNDELAY=1500;
private boolean mDND=false;
private Handler mHandler;
private int statsCounter;
private long mCacheSum;
private StatsObserver mStatsObs;
private ClearCacheObserver mClearObs;
private PackageManager mPM;
private List<PackageInfo> mInstPkg;
private Runnable mTriggerCount = new Runnable()
{
public void run()
{
countCache();
}
};
private Runnable mAutoKill = new Runnable()
{
public void run()
{
stopSelf();
}
};
//More info in ApplicationState.java @ android.git.kernel.org
class StatsObserver extends IPackageStatsObserver.Stub{
public void onGetStatsCompleted(PackageStats stats,boolean bl){
mCacheSum+=stats.cacheSize;
statsCounter++;
if(statsCounter>=mInstPkg.size()){
updateWidgets();
}
}
}
class ClearCacheObserver extends IPackageDataObserver.Stub {
public void onRemoveCompleted(final String packageName, final boolean succeeded) {
}
}
private void countCache() {
statsCounter = 0;
mCacheSum = 0;
mInstPkg= mPM.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES |
PackageManager.GET_DISABLED_COMPONENTS);
for(PackageInfo pInfo: mInstPkg){
// mPM.getPackageSizeInfo(pInfo.packageName, mStatsObs);
}
}
private void clearCache(){
mInstPkg= mPM.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES |
PackageManager.GET_DISABLED_COMPONENTS);
//mPM.freeStorageAndNotify(Integer.MAX_VALUE, mClearObs);
//mPM.freeStorageAndNotify(Long.MAX_VALUE, mClearObs);
mHandler.postDelayed(mTriggerCount, RECOUNTNDELAY);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
mStatsObs = new StatsObserver();
mClearObs = new ClearCacheObserver();
mPM = getPackageManager();
mHandler = new Handler();
}
@Override
public void onDestroy() {
mHandler.removeCallbacks(mAutoKill);
mHandler.removeCallbacks(mTriggerCount);
mDND=false;
super.onDestroy();
}
@Override
public void onStart(Intent intent, int startId) {
if(!mDND){
mHandler.postDelayed(mAutoKill, 20000);
mDND=true;
mCacheSum=0;
statsCounter=0;
if(CLEAR_INTENT.equals(intent.getAction())){
clearCache();
}
else{
countCache();
}
}
}
은}
이것은 제 문제이기도합니다. – Neutralizer