15

Kullanım koşulum var,android indirme yöneticisi indirme referans kimliği tarafından bir indirme durumu verecektir ne zamana kadar?

Android indirme yöneticisini kullanarak bir dosyayı indirmeye başladım ve cep telefonu kapalı ortada. Yeniden başlattığımda indirme işlemi devam etti ve tamamlandı. İndirme referans kimliğini vererek durumu aldım. Ancak bu referans kimliğini kullanarak 10 gün sonra bile durumu bilmek istiyorum.

Benim soru android indirme yöneticisi indir referans Kimlikle bir indirme durumunu verecektir zaman kadar mı?

Ben belgeleri inceledik ve akış desteyi geçti, ama cevap bulamazsanız. Birisi bana yardım etsin.

+0

Aynı soruya da sahibim ... tahminim, kullanıcı indirmeyi Download Manager uygulamasından kaldırmadığı sürece verilere erişebileceğidir (uzun basıp silme). – daramasala

cevap

1

Android DownloaderManager kullanırken

SharedPreferences settings = getSharedPreferences("DownloadIDS", 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putLong("downloadIds", downloadID); 
editor.commit(); 

Sen kimliği sonradan ulaşabildiği bir sistem hizmetidir. Her zaman koşuyor olması gerekiyordu. Ama kaçamadığı bazı durumlar var.

indirme HTTP kalıcı bağlantısı üzerinden gerçekleşir. Bu, aynı HTTP bağlantısı/yanıtı için kullanılan aynı bağlantı anlamına gelir. Bağlantı kesintisi, hata oluşur ve bu nedenle durumu referans kimliği ile takip edemezsiniz.

Android DownloadManager hizmeti, sunucudan STATUS hizmetinin alınacağı Android DownloadManager hizmeti aracılığıyla izlersiniz.

Android DownloadManager sunucusundan content-length tabanlı indir kullanır. Content-Length başlığı, akışa izin vermeyecektir (link). İçerik uzunluğuna dayalı indirme, özgeçmiş, duraklatma, kısmi indirme avantajına sahiptir - yukarıdaki bağlantı1'e bakın. Yani, sistemi yeniden başlattığınız zaman, yine indirmeyi yeniden başlatır (artırır).

content-length tabanlı yükleme store and forward (link) 'dir. Tamponlanmış içeriği kalıcı depolama alanına yönlendirmelisiniz, çünkü sınırlı sabit diskleriniz var.

Android DownloadManager ürününün ERROR_CANNOT_RESUME int numaralı telefonu vardır (link). ERROR_CANNOT_RESUME, COLUMN_STATUS bayrağına dayanmaktadır. İki tür COLUMN STATUS vardır: STATUS_PAUSED veya STATUS_FAILED. Sistem kapanmadan önce, sistem BroadcastReceiver aracılığıyla kapanma hakkında Android DownloadManager hizmetini gönderir. Android DownloadManager, daha sonra STATUS_PAUSED bayrağını etkinleştirir. Ve bir dahaki sefere cihazı yeniden başlattığınızda, sistem servisi otomatik olarak çalışır, STATUS_PAUSED sonra tekrar indirmeye başlar.

Cevap: orada (istemci tarafı, bağlantı veya sunucu tarafında) hatası olur ya da dosya (o STATUS_SUCCESSFUL kadar anlamına gelir) indirirken bitmedi yüzden dek, Android DownloadManager olan durumunun almaya devam. STATUS_FAILED olduğunda durum bilgisi alamazsınız - indirme tekrar denenmeyecektir (link).

Nasıl STATUS_FAILED olur? Müşterinin DownloadManager hizmet HTTP durum kodunu 4XX ( istemci yanıldı edilir tahmin Sunucusu) ve 5XX (Sunucu sunucu yanıldı algıladığında) (link), şimdi STATUS_FAILED gerçek olur algılar.

Diğer bazı durumlar: zaman Müşteriler tutar devre açma ve sunucu mantığına göre, sunucu zaman aşımı ile bağlantıyı kesebilirler. Yani, bu kontrol açıkça farklı HTTP sunucusuna dayanmaktadır. Bu günlerden burada pek bir şey istemeyiz. Sunucu tarafı mantığını bilmiyoruz. Status_codes sunucuya dayanmaktadır. Sunucuya karar verdiğinde istemci başarısız oldu ve sunucu, sunucu tarafında STATUS_FAILED bağlantıyı timeout yapıyor. istemciler, TCP bağlantılarının rasgele zamanlarında kaybolması için hazır olmalı ve bağlantıyı yeniden kurmalı ve HTTP isteğini yeniden deneyebilmelidir. Erken kapatılmış bir bağlantı bir hata olarak ele alınmamalıdır; Bir bağlantı, yalnızca bağlantıyı yeniden kurma girişimi başarısız olursa, sinyal verilebilir. Sorunuzun kesin bir cevabı yok.

Not: TCP connections to disappear at arbitrary times (link) kapalı Cihazınızın gün belli bir sayıdan sonra bağlantınızı devam ettirebilirsiniz burada ana mantıktır.

1) STATUS_FAILED numaralı telefondan, daha fazla veriyi izlemeye devam edemezsiniz.

2) Açık COLUMN_STATUS, ne STATUS_FAILED ne de STATUS_PAUSED ise, bu sütunun değeri tanımsızdır, burada daha fazla veriyi izleyemeyebilirsiniz.

- Yukarıdaki iki koşul dışındaki herhangi bir şey, indirme işlemi devam ediyor.

+0

@Gautam Cevabınız için teşekkürler, cevabı tamamen almadım. Sorum şu: İndirmeyi başlattığımı ve referans kimliğini indirdiğimi düşünün, şimdi durum STATUS_FAILED, STATUS_PAUSED, STATUS_SUCCESSFUL veya Neyse olsun. Şimdi kaç gün veya ay kadar, android sistemi verilen indirme referans kimliği için durum verecektir? –

+0

@San, özür dilerim, şimdi anladım. Her indirme sırasında bu kimlik sürekli olarak geçersiz kılınır. Durum başarılı olduğunda ve tamamlandığında, tüm süreç, sisteminize bağlı olarak bu değişkenleri daha sonra kaldıran GC, Çöp Toplama'nın bir parçası haline gelir. –

+0

Bağlantı koptuğunda da aynı şeyler.Bağlantı başarısız olduğunda (erken başarısızlık demiyorum - tekrar cevap okuma), sonsuza dek başarısız demektir. Aynı bağlantıyı tekrar kuramazsınız. Şimdi, yine, tüm yığın işlemi GC tarafından halledilir. –

-2

Sen indirme referans kimliğini saklamak için SharedPreferences kullanabilirsiniz. Böyle şey - bu

SharedPreferences downloadids = context.getSharedPreferences("DownloadIDS", 0); 
long savedDownloadIds = downloadids.getLong("downloadIds", 0); 
+0

Cevabınız için teşekkürler. Burada benim soru indirme referans kimliği saklamak hakkında değil Benim soru android sistemi belirli bir indirme referans kimliği için durum vermeyecek kadar mı? –

+1

Lütfen soru üzerine odaklanın. Yani benim sorum şu: android indirme yöneticisi indirme referans kimliği ile bir indirme durumunu verene kadar? –

+0

Soruyu anlıyorum. Ancak, OP'nin problemini farklı bir şekilde çözen bir geçici çözüm veriyorum. Düşündüm de haklı değil. –