android应用移动到SD卡_如何允许移动?_android:installLocation属性使用

  • A+
所属分类:Android开发

今天突然经理问到我们做的应用为什么不能移动到SD卡?(不是技术型的经理)哈哈,以前有用过这个Android:installLocation属性,下面我来介绍一下这个属性的用法,其实很简单,就是几个属性值,设置一下就好了。

这个功能是在Android 2.2版之后, Android应用才被允许移动到SD卡中。而在此之前开发的应用,全部没有这个功能。看看官网的截图:

意思就是:

auto 表示自动,由系统决定安装位置
internalOnly 安装在手机内存
preferExternal 安装在外部存储中

看看修改后的

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2.       package="com.bobxie.test"
  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 卡被装载之前就发出来了,程序根本没法收到。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: