2011-08-31 23 views
13

Bunu indirirken, kullanıcı tarafından durdurulmuş, durdurulabilir. Bunu DownloadManager ile nasıl başarabilirim?DownloadManager'ı kullanarak nasıl duraklatılır?

+0

Bunu da bilmek isterim. İndirme (ids) yöntemiyle indirme işlemini durdurmaya çalıştım ve İndirmeler tablosunda kontrol edersek işe yaramış gibi görünüyor, ancak bildirim alanında hala indirme olarak gösteriliyor. – morphium

+0

Yüklemeler tablosu Kullanıcının şuna göre erişilebiliyor: Niyet i = new Intent(); \t \t \t i.setAction (DownloadManager.ACTION_VIEW_DOWNLOADS); startActivity (i); – morphium

+0

Android için yeniyim, ancak C++ Qt kullanarak bir İndirme Yöneticisi oluşturdum, İndirme yöneticisini kendiniz uygulamayı planlıyorsanız, işte kullanmamın bir bağlantısı var. http://kunalmaemo.blogspot.com/2010/05/simple-download-manager-in-qt-with.html – Kunal

cevap

1

Bunu Web Uygulamasında yapmak mı istiyorsunuz?

Aynı şeyi düşünüyorum da. Bu, flash veya sliverlight vb. Ile, ancak saf HTML ile mümkün olabilirdi?

Sunucu tarafında, dosyaya erişmek ve çıktı akışına yazmak için RandomAccessFileReader (Apache) veya benzeri bir FileReader (bayt cinsinden) kullanabiliriz. Bir önceki oturumda kullanıcı tarafından ne kadar bayt indirildiğini de hatırlayabiliriz. Ancak sorun, müşterinin yerel dosya sisteminde diske dosya kaydetmenin standart bir yolu yoktur. ActiveX Nesnesini IE'de bir dosya yazmak için ikili dosya (mp3, flv vb.) Olmayan bir sıralı (düz metin) dosyası olmak üzere kullanabilirsiniz. Ama bu ActiveX bir çözüm değil. Dolayısıyla, web sitesi için 'Downloader' gibi bir şey tasarlamanız gerekebilir. Tıpkı Youtube Downloader gibi.

+1

Android'de DownloadManager için API hakkında konuşuyorum. DownloadManager'ın pause/resume ile ilgili api olduğunu bilmek istiyorum. –

2

"Duraklatma" sizin için tam olarak gerekli olmayabilir mi? DownloadManager aslında doesn't need to pause olarak devam edecek.

Bunun yerine, devam etmekle hızlandırılıyor olabilirsiniz? bu yardımcı olur bakınız:

çözüm Range istek başlığı uyguluyor

how to resume an interrupted download ...

// Open connection to URL. 
HttpURLConnection connection = 
     (HttpURLConnection) url.openConnection(); 

// Specify what portion of file to download. 
connection.setRequestProperty("Range", "bytes=" + downloaded + "-"); 
// here "downloaded" is the data length already previously downloaded. 

// Connect to server. 
connection.connect(); 

aslında bir listesinin tutulması, çünkü dosya indirme önceliği anahtarlama ("duraklatma" izin gerekmedikçe veya Başka bir şey daha karmaşık) ve sadece devam etme yeteneği sağlamak değil, yardımcı olmalıdır.

5

Kuyruktan remove a download yapabilirsiniz. Daha sonra yeniden başlatabilir, Range HTTP Üstbilgisini tekrar sıraya eklerken (örneğin TryTryAgain gibi) tekrar başlatabilirsiniz. Bunun şu anda daha kolay yapılabileceğine inanmıyorum.

+1

Fikrinizi denedim ama işe yaramıyor gibi görünüyor ya da önemli bir şeyi özledim mi. İndirilen veri baytlarını alıyorum ve downloadmanager.remove (referenceId) öğesini DownloadManager'a çalıştırırken kaldırmayı önlemek için dosyayı yeniden adlandırıyorum. Ve ilgili request.addRequestHeader ("Range", "bytes =" + bytesStored + "-") ile tekrar bir istek oluşturun; tekrar indirme yapmak için tekrar girin. Bana yardım edebilir misin? – Cjames

İlgili konular