【Android】Android 移動應用數據到SD


【Android】Android 移動應用數據到SD

 

 

在應用的menifest文件中指定就可以了,在 <manifest> 元素中包含android:installLocation 屬性,設置其值為"internalOnly"即可,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"  android:installLocation="internalOnly"  ... >  

android:installLocation 還有另外兩個屬性值:"preferExternal"和"auto",根據字面意思大概也能明白是什么意思了,還是說明如下:

如果你定義了 "preferExternal",意味着你要求你的應用安裝至擴展存儲,但是系統不能保證應用肯定會安裝至擴展存儲。如果擴展存儲沒有空間了,系統將把應用安裝到內置存儲。用戶可以在兩個位置之間移動你的應用。 
如果你定義了 "auto",表示你的應用可能會安裝在擴展存儲,但是對安裝位置沒有特別的偏好。系統將基於很多因素決定你的應用安裝到哪里。用戶同樣可以將應用在兩個位置之間移動

 

我們在使用Android手機時發現,有的程序允許被移動到SD卡,而有的不行?這是為什么呢?

因為在Android 2.2版之后, Android應用才被允許移動到SD卡中。而在此之前開發的應用,全部沒有這個功能。

那么究竟如何允許你的應用移動到SD卡呢?答案其實很簡單,只要給Manifest設置一個installLocation屬性即可。

這個屬性設置的是默認安裝位置, 共有三個有效值,auto、internalOnly、preferExternal。

auto 表示自動,由系統決定安裝位置

internalOnly 安裝在手機內存

preferExternal 安裝在外部存儲中

 


 

看一下修改后的AndroidManifest.xml。

   

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


是不是很簡單?

 

可能有人會問,如果我的還要支持2.1怎么辦呢? 其實不用管啦,你只要設置  <uses-sdk android:minSdkVersion="7" /> 然后安裝到2.1的設備上時,Android會忽略這個屬性,直接給你安裝到手機內存。

 

需要額外注意的是,並不是所有程序都適合移到SD卡上。下面就看一下,在哪些條件下,不建議允許程序移動到SD卡上。

  

Applications That Should NOT Install on External Storage

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:

Services
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.
Alarm Services
Your alarms registered with AlarmManager will be cancelled. You must manually re-register any alarms when external storage is remounted.
Input Method Engines
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.
Live Wallpapers
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.
Live Folders
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.
App Widgets
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).
Account Managers
Your accounts created with AccountManager will disappear until external storage is remounted.
Sync Adapters
Your AbstractThreadedSyncAdapter and all its sync functionality will not work until external storage is remounted.
Device Administrators
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.
Broadcast Receivers listening for "boot completed"
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.
Copy Protection
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.
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 卡被裝載之前就發出來了,程序根本沒法收到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM