Android中让应用程序自动安装到手机内存及判断应用程序是否安装在SDCard中
上次写了个widget程序,安装好后准备把它添加到手机主页上,发现窗口小部件中找不到我刚刚安装的那个widget,网上查资料才发现系统窗口小部件只能先加载扫描安装在内存的应用程序,把属于widget的APP显示到小部件列表上。
对于开发者来说,怎样才能让应用程序自动安装到手机内存中去呢?
在 Android2.2版本及之后,AndoridManifest.xml 中有一个属性: Android:installLocation ,可以通过设置这个属性的三个值 "auto" | "internalOnly" | "preferExternal",来决定将应用程序安装到哪里。
auto:
程序可能安装到外部存储介质上(例如,SDCard),但是默认会被安装到手机内存中,当手机内存为空时,程序将被安装到外部存储介质上。当程序安装在手机上后,用户可以在外部存储介质和手机内存上自行移动。
internalOnly(默认值):
当设置了该值后,程序只能安装在内存中,当手机内存为空时,安装不成功。
preferExternal:
将程序安装在外部存储介质上,但系统不保证程序一定会安装到外部存储介质上,当外部存储介质不可以或为空时,程序将被安装到内存中。若程序使用了forward-locking机制时也将被安装到内存中,因为外部存储不支持这种机制。程序安装后,用户同样可以在外部存储介质和内存之间自由移动。
当我们想知道应用程序是否安装在SDCard中时,可用如下语句判断:
- /**
- * 判断包名所对应的应用是否安装在SD卡上
- * @return, true if install on SD card
- */
- public static boolean isInstallOnSDCard(String packageName) {
- PackageManager pm = LauncherApplication.getApp().getPackageManager();
- ApplicationInfo appInfo;
- try {
- appInfo = pm.getApplicationInfo(packageName, 0);
- if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
- return true;
- }
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
- return false;
- }