Bunu etkileyebilecek bazı faktörler vardır:
Bir uygulamanın SD karta yüklenmesinin tercih edilebilir / mümkün olduğunu açıkça belirtmesi gerekir.
API Seviye 8'den başlayarak, uygulamanızın harici depolama birimine yüklenmesine izin verebilirsiniz (örneğin, cihazın SD kartı). Bu, android:installLocation
manifest özelliğiyle uygulamanız için bildirebileceğiniz isteğe bağlı bir özelliktir . Bu özelliği bildirmezseniz, uygulamanız yalnızca dahili depolama birimine yüklenir ve harici depolama birimine taşınamaz .
(Vurgu madeni)
Bir uygulama, SD karta bir uygulamanın yüklenmesini desteklemeyen API 7 (Froyo) veya daha düşük bir sürümü kullanarak derlenecek şekilde ayarlanmıştır (GingerBread veya daha yeni cihazlara yüklenmiş olsa bile)
Uygulamanızın harici depolama birimine yüklenebilmesi, yalnızca API Seviye 8 (Android 2.2) veya sonraki sürümlerini çalıştıran cihazlarda kullanılabilen bir özelliktir. API Seviye 8'den önce oluşturulan mevcut uygulamalar her zaman dahili depolama birimine yüklenir ve harici depolama alanına taşınamaz (API Seviye 8'e sahip cihazlarda bile) . Bununla birlikte, uygulamanız 8'den düşük bir API Düzeyi destekleyecek şekilde tasarlanmışsa, bu özelliği API Düzeyi 8 veya üzeri olan aygıtlar için desteklemeyi seçebilirsiniz ve yine de 8'den düşük bir API Düzeyi kullanan aygıtlarla uyumlu olabilirsiniz.
(Vurgu madeni)
Bazı uygulamaların SD karta yüklenmesinin tercih edilmemesinin nedenleri şunlardır:
Kullanıcı USB yığın depolama biriminin bilgisayarlarıyla dosya paylaşmasına izin verdiğinde (veya harici depolama biriminin bağlantısını kestiğinde veya kaldırdığında), harici depolama birimine yüklenen ve şu anda çalışan herhangi bir uygulama öldürülür. Yığın depolama devre dışı bırakılana ve harici depolama aygıtı cihaza yeniden takılana kadar sistem etkin bir şekilde uygulamanın farkında olmaz. Uygulamayı öldürmenin ve kullanıcı tarafından kullanılamamasının yanı sıra, bu bazı uygulama türlerini daha ciddi bir şekilde bozabilir. Uygulamanızın beklendiği gibi tutarlı davranması için, harici depolama biriminin bağlantısı kesildiğinde belirtilen sonuçlardan dolayı aşağıdaki özelliklerden herhangi birini kullanıyorsa uygulamanızın harici depolama birimine yüklenmesine izin vermemelisiniz:
Hizmetler
Service
Harici depolama alanı yeniden takıldığında çalışmanız öldürülecek ve yeniden başlatılmayacaktır. [...]
Alarm Servisleri
Kayıtlı alarmlarınız AlarmManager
iptal edilecektir. [...]
Giriş Yöntemi Motorları
IME'niz varsayılan IME ile değiştirilecektir. [...]
Canlı Duvarkağıtları
Çalışan Canlı Duvar Kağıdınız varsayılan Canlı Duvar Kağıdı ile değiştirilecektir. [...]
Uygulama Widget'ları
Uygulama Widget'ınız ana ekrandan kaldırılacak. Harici depolama alanı yeniden takıldığında, sistem ev uygulamasını sıfırlayana kadar (genellikle sistem yeniden başlatılıncaya kadar) Uygulama Widget'ınız kullanıcı tarafından seçilemez.
Hesap yöneticileri
İle oluşturulan hesaplarınız AccountManager
harici depolama alanı yeniden takılana kadar kaybolacaktır.
Senkronizasyon Adaptörleri
AbstractThreadedSyncAdapter
Harici depolama birimi yeniden takılana kadar sizin ve tüm senkronizasyon işlevleriniz çalışmaz.
Cihaz yöneticileri
Sizin DeviceAdminReceiver
ve tüm yönetici yetenekleri harici depolama remounted sonra da devam edebilir cihaz işlevselliği için öngörülemeyen sonuçları olabilir ki, devre dışı bırakılacak.
"Önyükleme tamamlandı" yı dinleyen Yayın Alıcıları
ACTION_BOOT_COMPLETED
Harici depolama aygıtı cihaza monte edilmeden önce sistem yayını yapar. Uygulamanız harici depolama birimine yüklenmişse, bu yayını asla alamaz.
Başvurunuz yukarıda listelenen özelliklerden herhangi birini kullanıyorsa, olmamalıdır uygulamanız harici depolama yüklemek için izin verir.
(Bazı parçalar düzeltildi. SD kart yeniden takıldıktan sonra geliştiricilerin uygulamalarının düzgün çalışmasını sağlamak için ne yapmaları gerektiğini açıklıyorlar.)
Not : Bu cevap, "Bazı uygulamalar neden SD karta taşınamıyor?"
Kaynak: Android Geliştiricileri: Uygulama Yükleme Konumu .