别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述Android中让应用程序自动安装到手机内存及判断应用程序是否安装在SDCard中相关的知识,希望能为你提供帮助。
上次写了个widget程序,安装好后准备把它添加到手机主页上,发现窗口小部件中找不到我刚刚安装的那个widget,网上查资料才发现系统窗口小部件只能先加载扫描安装在内存的应用程序,把属于widget的APP显示到小部件列表上。
对于开发者来说,怎样才能让应用程序自动安装到手机内存中去呢?
在 android2.2版本及之后,AndoridManifest.xml 中有一个属性: Android:installLocation ,可以通过设置这个属性的三个值 "auto" | "internalOnly" | "preferExternal",来决定将应用程序安装到哪里。
auto:
程序可能安装到外部存储介质上(例如,SDCard),但是默认会被安装到手机内存中,当手机内存为空时,程序将被安装到外部存储介质上。当程序安装在手机上后,用户可以在外部存储介质和手机内存上自行移动。
【Android中让应用程序自动安装到手机内存及判断应用程序是否安装在SDCard中】internalOnly(默认值):
当设置了该值后,程序只能安装在内存中,当手机内存为空时,安装不成功。
preferExternal:
将程序安装在外部存储介质上,但系统不保证程序一定会安装到外部存储介质上,当外部存储介质不可以或为空时,程序将被安装到内存中。若程序使用了forward-locking机制时也将被安装到内存中,因为外部存储不支持这种机制。程序安装后,用户同样可以在外部存储介质和内存之间自由移动。
当我们想知道应用程序是否安装在SDCard中时,可用如下语句判断:
[java]
view plain
copy
- /**
- * 判断包名所对应的应用是否安装在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;
- }
推荐阅读
- React-Native 问题随记2( com.android.builder.testing.api.DeviceException)
- Android 进制互相转换
- 深入理解android view 生命周期
- Android零基础入门第44节(ListView数据动态更新)
- 智能家居控制APPUI界面设计
- Eclipse 远程调试 WebSphere Application Server (WAS)
- 小影App里怎么保存别人的视频到电脑和手机
- Android Notification的使用 - z
- Wpf Application类的任务: