前言
最近在学网络编程, 学到DownloadManager时, 觉得也就几个方法, 那就整一下呗!心里想着也应该花不了多久。我就打算到网络上 下载个应用瞅瞅。
代码
Java部分:
package com.example.myapplication;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static DownloadManager mDownloadManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(this);
// 从系统服务中获取下载管理器
mDownloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
}
@Override
public void onClick(View v) {
//这里就直接写了一个地址,访问就能下载一个apk。
Uri uri = Uri.parse("https://3g.lenovomm.com/w3g/yydownload/com.kugou.android/60020");
Request request = new Request(uri);
request.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI);
request.setTitle("正在下载");
request.setDescription("下载中");
request.setAllowedNetworkTypes(Request.NETWORK_MOBILE
| Request.NETWORK_WIFI);
//后缀名为2.apk
request.setDestinationInExternalFilesDir(
this, Environment.DIRECTORY_DOWNLOADS,2 + ".apk");
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setVisibleInDownloadsUi(true);
long downloadId = mDownloadManager.enqueue(request) ;
}
}
XML部分:
至于xml中,就只需要一个button就行,这里就不写了
调试
第一次调试
出现了这个错误
java.lang.SecurityException: Permission Denial: writing com.android.providers.downloads.DownloadProvider uri content://downloads/my_downloads from pid=13495, uid=10155 requires android.permission.INTERNET, or grantUriPermission()
办法:简单,加个这个权限 <uses-permission android:name="android.permission.INTERNET"/>
第二次调试
继续调,哐当响一下,就给我整了个这个:
然后我就展开了调试,但logcat上面也没有提示出错的信息,调试了大半天,一无所获,完全不知道自己错在何处。 整个人都搞蒙了,开始怀疑人生了。就是感觉自己没有错, 但是结果却是错的。
解决方案
只得自己找找资料了,查了很久, 发现我的AndroidManifest文件中有一个属性没有写,
就是这个玩意:大概就是确保网络安全的意思吧,有兴趣的小伙伴自己查。
networkSecurityConfig
刚开始还不以为然,后面才发现就是它的问题!!!
第一步
在AndroidManifest的Application下加上这句话:
android:networkSecurityConfig="@xml/network_security_config"
第二步
新建一个xml文件, 在里面写一个network_security_config文件 具体如下:

第三步
network_security_config的内容
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>

在学习Android网络编程使用DownloadManager时,遇到了权限和网络安全配置的问题。初次调试因缺少INTERNET权限导致SecurityException;再次调试时,虽然添加了权限,但因networkSecurityConfig属性未设置,使得应用无法正常工作。解决方法包括在AndroidManifest中添加networkSecurityConfig属性,并创建相应的xml配置文件。
3649

被折叠的 条评论
为什么被折叠?



