Android文件下载——多线程断点下载mylibrary导出aar,并使用


项目代码链接: https://github.com/baiyazi/AndroidDownloadUtils,可自取。

1. 打包

对前面几篇博客中介绍的下载内容,这里打算打包为aar包。这里来进行简单的记录下,因为在项目Build的时候,其实也就默认生成了这个包。切换项目视图为project,然后使用build->rebuild project进行编译一下即可。当然,需要确保你创建的是com.android.library。如下图所示:

在这里插入图片描述

2. 使用

新建一个项目,将aar包拷贝到libs目录下:
在这里插入图片描述
然后在gradle文件中添加:

implementation files('libs/mylibrary-debug.aar')

在这里插入图片描述
或者可以通过图形化的方式添加,File->Project Strucutre->Dependencies->app,然后点击+号,进行添加依赖,选择Jar Dependency,然后输入libs/mylibrary-debug.aar即可:
在这里插入图片描述
其实效果是一样的。

然后拷贝布局文件代码activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    >

    <ProgressBar
        android:id="@+id/progressbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:progress="0"
        />

    <Button
        android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下载"
        />

    <Button
        android:id="@+id/pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="暂停"
        />

</LinearLayout>

对应的Activity的代码MainActivity和前面博客的保持一致:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
    
    private Button start, pause;
    private ProgressBar progressbar;
    private WMultiThreadBreakpointDownloader downloader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        start = findViewById(R.id.start);
        pause = findViewById(R.id.pause);
        progressbar = findViewById(R.id.progressbar);
        progressbar.setMax(100);

        downloader = new WMultiThreadBreakpointDownloader.Builder(this)
                .url("http://vjs.zencdn.net/v/oceans.mp4")
                .suffix(WFileSuffix.MP4)
                .cacheDirName("MP4")
                .build();

        start.setOnClickListener(this);

        pause.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                downloader.setIsPause(true);
            }
        });
    }

    @Override
    public void onClick(View v) {
    
    
        downloader.download(new WDownLoadListenerImpl() {
    
    
            @Override
            public void onSuccess(File file) {
    
    
                runOnUiThread(new Runnable() {
    
    
                    @Override
                    public void run() {
    
    
                        Toast.makeText(MainActivity.this, "Successful!", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onError(String msg) {
    
    
                runOnUiThread(new Runnable() {
    
    
                    @Override
                    public void run() {
    
    
                        Toast.makeText(MainActivity.this, "Error!", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onProgress(long currentPos, long totalLength) {
    
    
                runOnUiThread(new Runnable() {
    
    
                    @Override
                    public void run() {
    
    
                        int val = (int) (currentPos * 1.0 / totalLength * 100);
                        progressbar.setProgress(val);
                    }
                });
            }
        });
    }
}

然后我们需要添加权限:

<uses-permission android:name="android.permission.INTERNET" />

需要注意,访问网络不是危险权限,不需要进行动态权限申请。

因为为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,也即是HTTPS连接。这里我们使用的链接是http://vjs.zencdn.net/v/oceans.mp4,所以是不能通过的。

需要配置一下支持HTTP连接。即在res下创建xml/network_security_config.xml文件:
在这里插入图片描述
文件内容:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

最后在清单文件中,配置:

android:networkSecurityConfig="@xml/network_security_config"

在这里插入图片描述

3. 结果

在这里插入图片描述
SD卡中也可以看到这个下载的文件:
在这里插入图片描述

4. 最后

下载链接:mylibrary-debug.aar

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/120672039