Android获取 应用程序大小,数据大小,缓存大小

      在项目中创建,android.content.pm 包名。里面创建两个aidl文件。PackageStats.aidl  和 IPackageStatsObserver.aidl。

PackageStats.aidl

/* //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;

IPackageStatsObserver.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;

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);
}
 1  import android.app.Activity;
 2 import android.content.pm.IPackageStatsObserver;
 3 import android.content.pm.PackageManager;
 4 import android.content.pm.PackageStats;
 5 import android.os.Bundle;
 6 import android.os.Handler;
 7 import android.os.Message;
 8 import android.widget.TextView;
 9 
10 public class MainActivity extends Activity {
11     
12     private TextView tv;
13     private static final String ATTR_PACKAGE_STATS = "PackageStats";
14 
15     @Override
16     public void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         
19         tv = new TextView(this);
20         
21         setContentView(tv);
22         
23         getpkginfo("com.xj.notebook");
24     }
25 
26     private Handler mHandler = new Handler() {
27         public void handleMessage(Message msg) {
28             switch (msg.what) {
29             case 1:
30                 String infoString = "";
31                 PackageStats newPs = msg.getData().getParcelable(
32                         ATTR_PACKAGE_STATS);
33                 if (newPs != null) {
34                     infoString += "应用程序大小: " + formatFileSize(newPs.codeSize);
35                     infoString += "
数据大小: " + formatFileSize(newPs.dataSize);
36                     infoString += "
缓存大小: " + formatFileSize(newPs.cacheSize);
37                 }
38                 tv.setText(infoString);
39                 break;
40             default:
41                 break;
42             }
43         }
44     };
45 
46     public void getpkginfo(String pkg) {
47         PackageManager pm = getPackageManager();
48         try {
49             Method getPackageSizeInfo = pm.getClass().getMethod(
50                     "getPackageSizeInfo", String.class,
51                     IPackageStatsObserver.class);
52             getPackageSizeInfo.invoke(pm, pkg, new PkgSizeObserver());
53         } catch (Exception e) {
54         }
55     }
56 
57     class PkgSizeObserver extends IPackageStatsObserver.Stub {
58         public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) {
59             Message msg = mHandler.obtainMessage(1);
60             Bundle data = new Bundle();
61             data.putParcelable(ATTR_PACKAGE_STATS, pStats);
62             msg.setData(data);
63             mHandler.sendMessage(msg);
65         }
66     }
67 
68     /**
69      * 获取文件大小
70      */
71     public static String formatFileSize(long length) {
72         String result = null;
73         int sub_string = 0;
74         if (length >= 1073741824) {
75             sub_string = String.valueOf((float) length / 1073741824).indexOf(
76                     ".");
77             result = ((float) length / 1073741824 + "000").substring(0,
78                     sub_string + 3) + "GB";
79         } else if (length >= 1048576) {
80             sub_string = String.valueOf((float) length / 1048576).indexOf(".");
81             result = ((float) length / 1048576 + "000").substring(0,
82                     sub_string + 3) + "MB";
83         } else if (length >= 1024) {
84             sub_string = String.valueOf((float) length / 1024).indexOf(".");
85             result = ((float) length / 1024 + "000").substring(0,
86                     sub_string + 3) + "KB";
87         } else if (length < 1024)
88             result = Long.toString(length) + "B";
89         return result;
90     }
91 }
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/> 
原文地址:https://www.cnblogs.com/androidsj/p/5112097.html