DownloadManager之大坑

DownloadManager之坑

    • 前言
    • 代码
    • 调试
      • 第一次调试
      • 第二次调试
      • 解决方案
        • 第一步
        • 第二步
        • 第三步

前言

最近在学网络编程, 学到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()

办法:简单,加个这个权限

第二次调试

继续调,哐当响一下,就给我整了个这个:DownloadManager之大坑_第1张图片
然后我就展开了调试,但logcat上面也没有提示出错的信息,调试了大半天,一无所获,完全不知道自己错在何处。 整个人都搞蒙了,开始怀疑人生了。就是感觉自己没有错, 但是结果却是错的。

解决方案

只得自己找找资料了,查了很久, 发现我的AndroidManifest文件中有一个属性没有写,
就是这个玩意:大概就是确保网络安全的意思吧,有兴趣的小伙伴自己查。

networkSecurityConfig

刚开始还不以为然,后面才发现就是它的问题!!!

第一步

在AndroidManifest的Application下加上这句话:

android:networkSecurityConfig="@xml/network_security_config"

第二步

新建一个xml文件, 在里面写一个network_security_config文件 具体如下:
DownloadManager之大坑_第2张图片

第三步

network_security_config的内容

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

你可能感兴趣的:(Android,Studio)