1. 程式人生 > >Android中讓應用程序自動安裝到手機內存及判斷應用程序是否安裝在SDCard中

Android中讓應用程序自動安裝到手機內存及判斷應用程序是否安裝在SDCard中

gen targe art 默認 使用 安裝 ack 在外 static

上次寫了個widget程序,安裝好後準備把它添加到手機主頁上,發現窗口小部件中找不到我剛剛安裝的那個widget,網上查資料才發現系統窗口小部件只能先加載掃描安裝在內存的應用程序,把屬於widget的APP顯示到小部件列表上。

對於開發者來說,怎樣才能讓應用程序自動安裝到手機內存中去呢?

在 Android2.2版本及之後,AndoridManifest.xml 中有一個屬性: Android:installLocation ,可以通過設置這個屬性的三個值 "auto" | "internalOnly" | "preferExternal",來決定將應用程序安裝到哪裏。

auto:

程序可能安裝到外部存儲介質上(例如,SDCard),但是默認會被安裝到手機內存中,當手機內存為空時,程序將被安裝到外部存儲介質上。當程序安裝在手機上後,用戶可以在外部存儲介質和手機內存上自行移動。

internalOnly(默認值):

當設置了該值後,程序只能安裝在內存中,當手機內存為空時,安裝不成功。

preferExternal:

將程序安裝在外部存儲介質上,但系統不保證程序一定會安裝到外部存儲介質上,當外部存儲介質不可以或為空時,程序將被安裝到內存中。若程序使用了forward-locking機制時也將被安裝到內存中,因為外部存儲不支持這種機制。程序安裝後,用戶同樣可以在外部存儲介質和內存之間自由移動。


當我們想知道應用程序是否安裝在SDCard中時,可用如下語句判斷:

[java] view plain copy
    1. /**
    2. * 判斷包名所對應的應用是否安裝在SD卡上
    3. * @return, true if install on SD card
    4. */
    5. public static boolean isInstallOnSDCard(String packageName) {
    6. PackageManager pm = LauncherApplication.getApp().getPackageManager();
    7. ApplicationInfo appInfo;
    8. try {
    9. appInfo = pm.getApplicationInfo(packageName, 0);
    10. if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
    11. return true;
    12. }
    13. } catch (NameNotFoundException e) {
    14. e.printStackTrace();
    15. }
    16. return false;
    17. }

Android中讓應用程序自動安裝到手機內存及判斷應用程序是否安裝在SDCard中