解析Android 如何獲得已安裝應用大小

來源:互聯網
上載者:User

應用程式層面如何獲得已經安裝應用的大小?
網上找了一下有兩種方法:
1、直接拿到data目錄下對應的包,然後用File.length()方法獲得。然後會發現和設定裡顯示的大小不同。
2、通過反射調用設定裡源碼的方法獲得PackageStats類的執行個體。
兩種方法都不想用...
後來自己找到解決辦法:
PackageManager類有個getPackageSizeInfo方法如下: 複製代碼 代碼如下:public abstract void getPackageSizeInfo(String packageName,
IPackageStatsObserver observer);

只是這個方法是hide的。
自己編譯一下的android2.3的Framework架構,把jar包拷出來,只需要把架構匯入到library,設定在預設的android的lib之上遍可以優先使用自己編譯的架構了,其實也就是讓自己應用程式層能調用架構中的介面。
framework下載:點擊此處
下載好後,通過添加lib後把classes.jar添加到此lib中,






然後將自己的lib up到sdk提供的Android2.3.3之上。注意不能直接使用Add External JARs直接匯入。




下面就是直接使用方法了。
複製代碼 代碼如下:pm.getPackageSizeInfo(packageInfo.packageName,
new IPackageStatsObserver.Stub() {
public void onGetStatsCompleted(PackageStats stats,
boolean succeeded) {
Log.v("King", stats.codeSize);
Log.v("King", stats.dataSize);
Log.v("King", stats.cacheSize);
}
});

第一個參數是包名,想必大家都能拿到。
第二個參數是實現AIDL產生的JAVA介面的匿名內部類。在回調方法裡即可處理常式大小資料。
stats.codeSize:應用程式大小
stats.dataSize:資料大小
stats.cacheSize:緩衝大小
一般大家可能都是用listView去顯示每個應用的大小,而調用getPackageSizeInfo方法是不能立刻拿到值的,所以要和其他資料非同步顯示。

可以通過handler講資料發送出去後,然後調用Adapter的notifyDataSetChanged()方法更新顯示應用大小。
也許你還想點擊每一項可以可以直接跳轉到設定裡的應用管理介面,而不自己去寫卸載、清除緩衝等方法。設定源碼的方法如下,可以搬過來照樣用:複製代碼 代碼如下:Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,Uri.fromParts("package",包名 ,null));
// start new activity to display extended information
startActivityForResult(intent, 1);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.