我们在使用Android手机时发现,有的程序允许被移动到SD卡,而有的不行?这是为什么呢?

因为在Android 2.2版之后, Android应用才被允许移动到SD卡中。而在此之前开发的应用,全部没有这个功能。

那么究竟如何允许你的应用移动到SD卡呢?答案其实很简单,只要给Manifest设置一个installLocation属性即可。

这个属性设置的是默认安装位置, 共有三个有效值,auto、internalOnly、preferExternal。

auto 表示自动,由系统决定安装位置

internalOnly 安装在手机内存

preferExternal 安装在外部存储中

看一下修改后的AndroidManifest.xml。

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.yfz"
  3. android:installLocation="auto"
  4. android:versionCode="1"
  5. android:versionName="1.0">

是不是很简单?

可能有人会问,如果我的还要支持2.1怎么办呢? 其实不用管啦,你只要设置  <uses-sdk android:minSdkVersion="7" /> 然后安装到2.1的设备上时,Android会忽略这个属性,直接给你安装到手机内存。

需要额外注意的是,并不是所有程序都适合移到SD卡上。下面就看一下,在哪些条件下,不建议允许程序移动到SD卡上。

  1. Applications That Should NOT Install on External Storage
  2. When the user enables USB mass storage to share files with their computer (or otherwise unmounts or removes the external storage), any application installed on the external storage and currently running is killed. The system effectively becomes unaware of the application until mass storage is disabled and the external storage is remounted on the device. Besides killing the application and making it unavailable to the user, this can break some types of applications in a more serious way. In order for your application to consistently behave as expected, you should not allow your application to be installed on the external storage if it uses any of the following features, due to the cited consequences when the external storage is unmounted:
  3. Services
  4. Your running Service will be killed and will not be restarted when external storage is remounted. You can, however, register for the ACTION_EXTERNAL_APPLICATIONS_AVAILABLE broadcast Intent, which will notify your application when applications installed on external storage have become available to the system again. At which time, you can restart your Service.
  5. Alarm Services
  6. Your alarms registered with AlarmManager will be cancelled. You must manually re-register any alarms when external storage is remounted.
  7. Input Method Engines
  8. Your IME will be replaced by the default IME. When external storage is remounted, the user can open system settings to enable your IME again.
  9. Live Wallpapers
  10. Your running Live Wallpaper will be replaced by the default Live Wallpaper. When external storage is remounted, the user can select your Live Wallpaper again.
  11. Live Folders
  12. Your Live Folder will be removed from the home screen. When external storage is remounted, the user can add your Live Folder to the home screen again.
  13. App Widgets
  14. Your App Widget will be removed from the home screen. When external storage is remounted, your App Widget will not be available for the user to select until the system resets the home application (usually not until a system reboot).
  15. Account Managers
  16. Your accounts created with AccountManager will disappear until external storage is remounted.
  17. Sync Adapters
  18. Your AbstractThreadedSyncAdapter and all its sync functionality will not work until external storage is remounted.
  19. Device Administrators
  20. Your DeviceAdminReceiver and all its admin capabilities will be disabled, which can have unforeseeable consequences for the device functionality, which may persist after external storage is remounted.
  21. Broadcast Receivers listening for "boot completed"
  22. The system delivers the ACTION_BOOT_COMPLETED broadcast before the external storage is mounted to the device. If your application is installed on the external storage, it can never receive this broadcast.
  23. Copy Protection
  24. Your application cannot be installed to a device's SD card if it uses Android Market's Copy Protection feature. However, if you use Android Market's Application Licensing instead, your application can be installed to internal or external storage, including SD cards.
  25. If your application uses any of the features listed above, you should not allow your application to install on external storage. By default, the system will not allow your application to install on the external storage, so you don't need to worry about your existing applications. However, if you're certain that your application should never be installed on the external storage, then you should make this clear by declaring android:installLocation with a value of "internalOnly". Though this does not change the default behavior, it explicitly states that your application should only be installed on the internal storage and serves as a reminder to you and other developers that this decision has been made

上面这段一定要看,很重要。 比如你的程序如果想开机自启动,那就一定不能允许移动到SD卡了。 因为开机启动的广播消息BOOT_COMPLETE在 SD 卡被装载之前就发出来了,程序根本没法收到。

好了,就写这么多了。

更多内容可以看这里:  http://www.cnblogs.com/over140/archive/2011/03/21/1989891.html

如何允许你的应用移动到SD卡?(转至http://blog.csdn.net/feng88724/article/details/6946670)的更多相关文章

  1. 菜鸟在ubuntu 16.04下制作am335x的SD卡启动盘反思

    以前只在消费电子平台android和rtos上做软件,每次都是公司的环境现成的,根本不用去想启动加载那部分 的事情,最近在做一个工控机的项目时,接触到了TI的arm335x系列的平台,才发现在嵌入式的 ...

  2. 模拟器下的虚拟sd卡添加文件

    1.若出现mkdir failed for myData Read-only file system,在执行 adb shell 命令后,执行mount -o remount ,rw / (去除文件的 ...

  3. SD卡驱动学习

    https://blog.csdn.net/zqixiao_09/article/category/6163492 sd 协议解析: https://blog.csdn.net/g_salamande ...

  4. Android将应用调试log信息保存在SD卡

    转载:http://blog.csdn.net/way_ping_li/article/details/8487866 把自己应用的调试信息写入到SD卡中. package com.sdmc.hote ...

  5. 监听SD卡状态

     最近在做项目时遇到需要处理SD卡拔出时的监听,在网上找了很多资料.总结了一下, 用接收广播处理最有效率     sd卡拔插时会发送广播,具体如下(摘自一位大虾的博客  来自:http://blog. ...

  6. Android入门开发之SD卡读写操作(转)

    SD卡的读写是我们在开发android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String  sdCardRoot = Environment.getE ...

  7. sd 卡驱动--基于高通平台

    点击打开链接 内容来自以下博客: http://blog.csdn.net/qianjin0703/article/details/5918041 Linux设备驱动子系统第二弹 - SD卡 (有介绍 ...

  8. SD卡中FAT32文件格式快速入门(图文详细介绍)【转】

    本文转自:http://blog.csdn.net/mjx91282041/article/details/8904705 说明: MBR :Master Boot Record ( 主引导记录) D ...

  9. Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅

      Android 高手进阶(21)  版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处http://blog.csdn.net/xiaanming/article/details ...

随机推荐

  1. zipkin微服务调用链分析

    1.zipkin的作用 在微服务架构下,一个http请求从发出到响应,中间可能经过了N多服务的调用,或者N多逻辑操作, 如何监控某个服务,或者某个逻辑操作的执行情况,对分析耗时操作,性能瓶颈具有很大价 ...

  2. 网易云信消息抄送服务的第三方接口示例(Java)

    package com.netease.nim.route; import com.alibaba.fastjson.JSONObject; import com.netease.nim.route. ...

  3. Ubuntu访问Windows共享目录

    你可以选择目录挂载的形式,也可以选择直接使用图形界面的形式. 下面直接在文件浏览器中打开windows共享目录. 1 安装samba sudo apt-get install samba 2 打开一个 ...

  4. Linux考前突击

    ### 试题 --- http://blog.51cto.com/12612579/2056140 ### 涉及到的知识点 --- Linux之通配符https://www.cnblogs.com/0 ...

  5. Node.js学习笔记(1)--一个最简单的服务器请求

    说明(2017-5-2 10:27:03): 1. 需要安装node,http://nodejs.cn/download/ 2. 安装完后,在cmd里输入node -v可以查看版本. 3. 代码foo ...

  6. iOSTableview 禁止下拉,允许上拉

    1 回弹机制:bounces alwaysBounceHorizontal alwaysBounceVerticalbounces:描述的当scrollview的显示超过内容区域的边缘以及返回时,是否 ...

  7. 有用sql语句一

    DECLARE @retval int, @param1 int EXECUTE @retval=master.dbo.xp_fileexist 'D:\TkSoft\SamplePic\Fabric ...

  8. 无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型

    今天写winform的时候遇到一个问题,提示: 无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型, 主要是为了在子线程中更新UI线程,在wpf中同样的写法 ...

  9. Android—— Fragment 真正的完全解析(上)(转)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fra ...

  10. 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心

    基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...