我们都知道在Android的设置->应用程序中能够查看应用程序的相关信息,当中有一个功能是清除缓存。如图:
怎么实现这些功能呢,从Android的setting源代码中能够得到相关信息。
实现例如以下:
Java代码:
package com.wang.clearcache;
import java.lang.reflect.Method;
import android.os.Bundle;
import android.os.RemoteException;
import android.app.Activity;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
public class MainActivity extends Activity {
	private PackageManager pm;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		pm = getPackageManager();
		//反射
		try {
			Method method = PackageManager.class.getMethod("getPackageSizeInfo", new Class[]{String.class,IPackageStatsObserver.class});
			method.invoke(pm, new Object[]{"com.wang.clearcache",new IPackageStatsObserver.Stub() {
				
				@Override
				public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
						throws RemoteException 
				{
					long cachesize = pStats.cacheSize;
					long codesize = pStats.codeSize;
					long datasize = pStats.dataSize;
					System.out.println("cachesize:"+ cachesize);
					System.out.println("codesize:"+ codesize);
					System.out.println("datasize"+ datasize);
				}
			}});
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}
由于得到缓存信息须要增加android.permission.GET_PACKAGE_SIZE的权限
Androidmainifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wang.clearcache"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.wang.clearcache.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest></pre><pre name="code" class="java">由于使用在代码中使用了PackageManager的getPackageSizeInfo这个函数。可是这种方法是不正确外公开的函数,全部我们须要使用发射来调用这个函数,在该方法的内部回调了onGetStatsCompleted(PackageStats pStats, boolean succeeded)这种方法,通过该方法的pStats參数能够得到应用的缓存,数据缓存,代码容量缓存,在使用的过程中须要用到系统的aidl文件
IPackageStatsObserver:
/*
**
** 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;
import android.content.pm.PackageStats;
/**
 * 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 IPackageStatsObserver {
    
    void onGetStatsCompleted(in PackageStats pStats, boolean succeeded);
}
PackageStats:
/* //device/java/android/android/view/WindowManager.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; parcelable PackageStats;
源代码地址下载:
http://download.csdn.net/detail/wangbiaohome/8026535
版权声明:本文博客原创文章,博客,未经同意,不得转载。
原文:http://www.cnblogs.com/bhlsheji/p/4677480.html