Fetch คือไลบรารีตัวจัดการดาวน์โหลดไฟล์ที่เรียบง่าย ทรงพลัง และปรับแต่งได้สำหรับ Android
API ที่เรียบง่ายและใช้งานง่าย
ดาวน์โหลดอย่างต่อเนื่องในพื้นหลัง
รองรับการดาวน์โหลดพร้อมกัน
ความสามารถในการหยุดชั่วคราวและดาวน์โหลดต่อ
กำหนดลำดับความสำคัญของการดาวน์โหลด
รองรับการดาวน์โหลดเฉพาะเครือข่าย
ความสามารถในการลองดาวน์โหลดที่ล้มเหลวอีกครั้ง
ความสามารถในการจัดกลุ่มการดาวน์โหลด
ความคืบหน้าและการติดตามสถานะที่ง่ายดาย
ดาวน์โหลดการรายงานเวลาที่เหลือ (ETA)
ดาวน์โหลดรายงานความเร็ว
บันทึกและดึงข้อมูลการดาวน์โหลดได้ตลอดเวลา
การสนับสนุนการแจ้งเตือน
กรอบการเข้าถึงพื้นที่เก็บข้อมูล ผู้ให้บริการเนื้อหา และการสนับสนุน URI
และอื่นๆ...
หากคุณกำลังบันทึกการดาวน์โหลดไว้นอกแซนด์บ็อกซ์ของแอปพลิเคชัน คุณจะต้องเพิ่มสิทธิ์ในการจัดเก็บข้อมูลต่อไปนี้ลงในรายการของแอปพลิเคชันของคุณ สำหรับ Android SDK เวอร์ชัน 23(M) ขึ้นไป คุณจะต้องขอสิทธิ์เหล่านี้จากผู้ใช้อย่างชัดเจนด้วย
นอกจากนี้ในขณะที่คุณกำลังจะใช้อินเทอร์เน็ตในการดาวน์โหลดไฟล์ เราจำเป็นต้องเพิ่มสิทธิ์การเข้าถึงอินเทอร์เน็ตในรายการ
การใช้ Fetch เป็นเรื่องง่าย! เพียงเพิ่มการพึ่งพา Gradle ให้กับไฟล์ build.gradle ของแอปพลิเคชันของคุณ
การใช้งาน "com.tonyodev.fetch2:fetch2:3.0.12"
การใช้งาน Androidx:
การใช้งาน "androidx.tonyodev.fetch2:xfetch2:3.1.6"
ถัดไป รับอินสแตนซ์ของ Fetch และขอดาวน์โหลด
TestActivity ระดับสาธารณะขยาย AppCompatActivity { การดึงข้อมูลส่วนตัว; @Override ป้องกันโมฆะ onCreate (@ Nullable Bundle saveInstanceState) { super.onCreate (savedInstanceState); FetchConfiguration fetchConfiguration = FetchConfiguration.Builder ใหม่ (สิ่งนี้) .setDownloadConcurrentLimit (3) .สร้าง(); fetch = Fetch.Impl.getInstance (fetchConfiguration); URL สตริง = "http:www.example.com/test.txt"; ไฟล์สตริง = "/downloads/test.txt"; คำขอสุดท้าย คำขอ = คำขอใหม่ (url, ไฟล์); request.setPriority (ลำดับความสำคัญสูง); request.setNetworkType(NetworkType.ALL); request.addHeader("clientKey", "SD78DF93_3947&MVNGHE1WONG"); fetch.enqueue(request, addedRequest -> { //คำขอถูกเข้าคิวเพื่อดาวน์โหลดสำเร็จแล้ว }, ข้อผิดพลาด -> { //เกิดข้อผิดพลาดขณะรอคำขอ - - -
การติดตามความคืบหน้าและสถานะของการดาวน์โหลดเป็นเรื่องง่ายมากด้วยการดึงข้อมูล เพียงเพิ่ม FetchListener ไปยังอินสแตนซ์ Fetch ของคุณ จากนั้น Listener จะได้รับแจ้งทุกครั้งที่สถานะการดาวน์โหลดหรือความคืบหน้ามีการเปลี่ยนแปลง
FetchListener fetchListener = ใหม่ FetchListener() { @แทนที่โมฆะสาธารณะ onQueued(@NotNull ดาวน์โหลด ดาวน์โหลด บูลีน waitOnNetwork) { if (request.getId() == download.getId()) { showDownloadInList(ดาวน์โหลด); - } @แทนที่โมฆะสาธารณะเมื่อเสร็จสมบูรณ์(@การดาวน์โหลดดาวน์โหลด NotNull) { } @แทนที่โมฆะสาธารณะ onError(@NotNull ดาวน์โหลดดาวน์โหลด) { ข้อผิดพลาดข้อผิดพลาด = download.getError(); } @Override public void onProgress(@NotNull ดาวน์โหลด ดาวน์โหลด, etaInMilliSeconds แบบยาว, ดาวน์โหลด BytesPerSecond แบบยาว) { if (request.getId() == download.getId()) { updateDownload (ดาวน์โหลด, etaInMilliSeconds); } ความคืบหน้า int = download.getProgress(); } @แทนที่โมฆะสาธารณะ onPaused(@NotNull ดาวน์โหลดดาวน์โหลด) { } @แทนที่โมฆะสาธารณะ onResumed(@NotNull ดาวน์โหลดดาวน์โหลด) { } @แทนที่โมฆะสาธารณะเมื่อยกเลิก(@NotNull ดาวน์โหลดดาวน์โหลด) { } @แทนที่โมฆะสาธารณะ onRemoved(@NotNull ดาวน์โหลดดาวน์โหลด) { } @แทนที่โมฆะสาธารณะ onDeleted(@NotNull ดาวน์โหลดดาวน์โหลด) { - };fetch.addListener(fetchListener);//ลบ Listener เมื่อเสร็จสิ้น fetch.removeListener(fetchListener);
Fetch รองรับการหยุดการดาวน์โหลดชั่วคราวและทำต่อโดยใช้รหัสคำขอ รหัสคำขอคือตัวระบุเฉพาะที่จับคู่คำขอกับการดาวน์โหลด Fetch การดาวน์โหลดที่ส่งคืนโดย Fetch จะมีรหัสที่ตรงกับรหัสคำขอที่เริ่มการดาวน์โหลด
คำขอ request1 = คำขอใหม่ (url, ไฟล์); คำขอ request2 = คำขอใหม่ (url2, file2); fetch.pause (request1.getId()); ...fetch.resume(request2.getId());
คุณสามารถสอบถาม Fetch เพื่อดาวน์โหลดข้อมูลได้หลายวิธี
//สืบค้น downloadsfetch.getDownloads ทั้งหมด (Func ใหม่ <รายการ ขยายการดาวน์โหลด>>() { @แทนที่ การเรียกโมฆะสาธารณะ (รายการ ขยายการดาวน์โหลด> ดาวน์โหลด) { // เข้าถึงการดาวน์โหลดทั้งหมดที่นี่ - });//รับการดาวน์โหลดทั้งหมดด้วย statusfetch.getDownloadsWithStatus(Status.DOWNLOADING, new Func>() { @Override public void call(List Extended Download> downloads) { //เข้าถึงการดาวน์โหลด ที่กำลังดาวน์โหลด - });// คุณยังสามารถเข้าถึงการดาวน์โหลดที่จัดกลุ่มไว้ groupId = 52687447745;fetch.getDownloadsInGroup(groupId, new Func
>() { @Override public void call(List Extended Download> downloads) { / /เข้าถึงการดาวน์โหลดที่จัดกลุ่มไว้ - -
เมื่อคุณใช้งาน Fetch เสร็จแล้ว เพียงปล่อยมัน
//do workfetch.close();//ทำงานเพิ่มเติม
ตามค่าเริ่มต้น Fetch จะใช้ไคลเอนต์ HttpUrlConnection ผ่าน HttpUrlConnectionDownloader เพื่อดาวน์โหลดคำขอ เพิ่มการพึ่งพา Gradle ต่อไปนี้ใน build.gradle ของแอปพลิเคชันของคุณเพื่อใช้ OkHttp Downloader แทน คุณสามารถสร้างโปรแกรมดาวน์โหลดแบบกำหนดเองได้หากจำเป็น ดูเอกสาร Java สำหรับรายละเอียด
การใช้งาน "com.tonyodev.fetch2okhttp:fetch2okhttp:3.0.12"
การใช้งาน Androidx:
การใช้งาน "androidx.tonyodev.fetch2okhttp:xfetch2okhttp:3.1.6"
ตั้งค่า OkHttp Downloader เพื่อให้ Fetch ใช้งาน
OkHttpClient okHttpClient = ใหม่ OkHttpClient.Builder().build();FetchConfiguration fetchConfiguration = ใหม่ FetchConfiguration.Builder(นี้) .setDownloadConcurrentLimit (10) .setHttpDownloader(OkHttpDownloader ใหม่ (okHttpClient)) .build();Fetch fetch = Fetch.Impl.getInstance(fetchConfiguration);
หากคุณต้องการใช้ประโยชน์จากคุณสมบัติ RxJava2 เมื่อใช้ Fetch ให้เพิ่มการพึ่งพาการไล่ระดับต่อไปนี้ให้กับไฟล์ build.gradle ของแอปพลิเคชันของคุณ
การใช้งาน "com.tonyodev.fetch2rx:fetch2rx:3.0.12"
การใช้งาน Androidx:
การใช้งาน "androidx.tonyodev.fetch2rx:xfetch2rx:3.1.6"
RxFetch ช่วยให้จัดคิวคำขอดาวน์โหลดและค้นหาการดาวน์โหลดโดยใช้วิธีการทำงานของ rxJava2 ได้อย่างง่ายดาย
FetchConfiguration fetchConfiguration = FetchConfiguration.Builder(this).build();Rxfetch rxFetch = RxFetch.Impl.getInstance(fetchConfiguration);rxFetch.getDownloads() ใหม่ .asFlowable() .subscribe(new Consumer>() { @Override public void ยอมรับ (รายการ <ดาวน์โหลด> ดาวน์โหลด) ส่งข้อยกเว้น { // เข้าถึงผลลัพธ์ - }, Consumer ใหม่
() { @Override โมฆะสาธารณะยอมรับ (Throwable Throwable) โยนข้อยกเว้น { //เกิดข้อผิดพลาด ข้อผิดพลาดสุดท้าย error = FetchErrorUtils.getErrorFromThrowable (throwable); - -
ขอแนะนำ FetchFileServer FetchFileServer เป็นเซิร์ฟเวอร์ไฟล์ TCP น้ำหนักเบาที่ทำงานเหมือนกับเซิร์ฟเวอร์ไฟล์ HTTP ที่ออกแบบมาเพื่อแชร์ไฟล์ระหว่างอุปกรณ์ Android โดยเฉพาะ คุณสามารถโฮสต์ทรัพยากรไฟล์ด้วย FetchFileServer บนอุปกรณ์เครื่องหนึ่ง และต้องดึงข้อมูลดาวน์โหลดไฟล์จากเซิร์ฟเวอร์บนอุปกรณ์อีกเครื่องหนึ่ง ดูแอปตัวอย่างสำหรับข้อมูลเพิ่มเติม Wiki บน FetchFileServer จะถูกเพิ่มในอีกไม่กี่วันข้างหน้า
เริ่มใช้ FetchFileServer โดยเพิ่มการพึ่งพาการไล่ระดับให้กับไฟล์ build.gradle ของแอปพลิเคชันของคุณ
การใช้งาน "com.tonyodev.fetch2fileserver:fetch2fileserver:3.0.12"
การใช้งาน Androidx:
การใช้งาน "androidx.tonyodev.fetch2fileserver:xfetch2fileserver:3.1.6"
เริ่มต้นอินสแตนซ์ FetchFileServer และเพิ่มไฟล์ทรัพยากรที่สามารถให้บริการกับไคลเอ็นต์ที่เชื่อมต่อได้
TestActivity ระดับสาธารณะขยาย AppCompatActivity { FetchFileServer fetchFileServer; @Override ป้องกันโมฆะ onCreate (@ Nullable Bundle saveInstanceState) { super.onCreate (savedInstanceState); fetchFileServer = FetchFileServer.Builder ใหม่ (สิ่งนี้) .สร้าง(); fetchFileServer.start(); // ฟังการเชื่อมต่อไคลเอนต์ File file = new File("/downloads/testfile.txt"); FileResource fileResource = ใหม่ FileResource(); fileResource.setFile(file.getAbsolutePath()); fileResource.setLength(ไฟล์.ความยาว()); fileResource.setName("testfile.txt"); fileResource.setId(UUID.randomUUID().hashCode()); fetchFileServer.addFileResource(fileResource); } @Override ป้องกันโมฆะ onDestroy() { super.onDestroy(); fetchFileServer.shutDown (เท็จ); - -
การดาวน์โหลดไฟล์จาก FetchFileServer โดยใช้ Fetch นั้นเป็นเรื่องง่าย
TestActivity ระดับสาธารณะขยาย AppCompatActivity { ดึงข้อมูล; @Override ป้องกันโมฆะ onCreate (@ Nullable Bundle saveInstanceState) { super.onCreate (savedInstanceState); FetchConfiguration fetchConfiguration = FetchConfiguration.Builder ใหม่ (สิ่งนี้) .setFileServerDownloader(new FetchFileServerDownloader()) //ต้องตั้งค่าตัวดาวน์โหลดไฟล์เซิร์ฟเวอร์ .สร้าง(); fetch = Fetch.Impl.getInstance (fetchConfiguration); fetch.addListener(fetchListener); ไฟล์สตริง = "/downloads/sample.txt"; URL สตริง = FetchFileServerUrlBuilder ใหม่ () .setHostInetAddress("127.0.0.1", 6886) // ไฟล์เซิร์ฟเวอร์ ip และพอร์ต .setFileResourceIdentifier("testfile.txt") //ชื่อหรือรหัสทรัพยากรของไฟล์ .สร้าง(); คำขอ คำขอ = คำขอใหม่ (url, ไฟล์); fetch.enqueue (คำขอ, คำขอ 1 -> { // คำขอเข้าคิวเพื่อดาวน์โหลด }, ข้อผิดพลาด -> { //เกิดข้อผิดพลาดขณะเข้าคิวการดาวน์โหลด - } @Override ป้องกันโมฆะ onResume() { super.onResume(); fetch.addListener(fetchListener); } @Override ป้องกันโมฆะ onPause() { super.onPause(); fetch.removeListener (fetchListener); } @Override ป้องกันโมฆะ onDestroy() { super.onDestroy(); ดึงข้อมูลปิด(); } FetchListener ส่วนตัว fetchListener = new AbstractFetchListener() { @แทนที่โมฆะสาธารณะ onProgress(@NotNull ดาวน์โหลด ดาวน์โหลด etaInMilliSeconds ยาว ดาวน์โหลด BytesPerSecond ยาว) { super.onProgress (ดาวน์โหลด etaInMilliSeconds ดาวน์โหลด BytesPerSecond); Log.d("TestActivity", "ความคืบหน้า: " + download.getProgress()); } @แทนที่โมฆะสาธารณะ onError(@NotNull ดาวน์โหลดดาวน์โหลด) { super.onError (ดาวน์โหลด); Log.d("TestActivity", "ข้อผิดพลาด: " + download.getError().toString()); } @แทนที่โมฆะสาธารณะเมื่อเสร็จสมบูรณ์(@การดาวน์โหลด NotNull) { super.onCompleted (ดาวน์โหลด); Log.d("TestActivity", "เสร็จสมบูรณ์ "); - - -
ย้ายการดาวน์โหลดจาก Fetch1 ไปยัง Fetch2 โดยใช้ตัวช่วยการโยกย้าย เพิ่มการพึ่งพาการไล่ระดับต่อไปนี้ลงในไฟล์ build.gradle ของแอปพลิเคชันของคุณ
การใช้งาน "com.tonyodev.fetchmigrator:fetchmigrator:3.0.12"
การใช้งาน Androidx:
การใช้งาน "androidx.tonyodev.fetchmigrator:xfetchmigrator:3.1.6"
จากนั้นเรียกใช้ Migrator
if (!didMigrationRun()) { //การโยกย้ายต้องทำงานบนเธรดพื้นหลัง new Thread(new Runnable() { @Override public void run() { try { Final ListTransferDownloads = FetchMigrator.migrateFromV1toV2(getApplicationContext() , APP_FETCH_NAMESPACE); //TODO: อัปเดตการอ้างอิงภายนอกของรหัสสำหรับ (DownloadTransferPair โอนดาวน์โหลด: TransferDownloads) { Log.d("newDownload", TransferDownload.getNewDownload().toString()); Log.d("oldId in Fetch v1", โอนดาวน์โหลด.getOldID() + ""); } FetchMigrator.deleteFetchV1Database(getApplicationContext()); setMigrationDidRun(จริง); //ตั้งค่าและเรียกใช้ Fetch2 หลังจากการย้ายข้อมูล } จับ (SQLException e) { e.printStackTrace(); - - }).เริ่ม(); } else { //ตั้งค่าและเรียกใช้ Fetch2 ตามปกติ -
การดึงข้อมูลจะดีขึ้นได้ก็ต่อเมื่อคุณมีส่วนร่วมกับโค้ด พบข้อผิดพลาดหรือไม่? รายงานมัน. มีแนวคิดเกี่ยวกับคุณลักษณะที่คุณอยากเห็นในการดึงข้อมูลหรือไม่ มีส่วนร่วมในโครงการ!
Copyright (C) 2017 Tonyo Francis. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.