项目代码链接: 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