C++学习(四八八)android下载权限及下载崩溃

问题描述:设置了网络下载权限,但是执行下载时程序崩溃。

打开下载权限方法,在AndroidManifest.xml文件中添加

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

下载程序崩溃,有两个原因,一是Android9.0(API28)以后默认将禁止明文访问网络,只允许使用https url访问;二是下载资源的程序和Activity在一个线程中。

第一个原因,可采用文章Android 9 请求网络报异常:Cleartext HTTP traffic not permitted_JWangZzz的博客-CSDN博客中的方法,本文使用的是:

android:usesCleartextTraffic="true"

第二个原因,需要将下载程序放在一个单独的线程中。

下载线程代码如下:

Thread t=new Thread(){
        public void run() {
            //下载图片的路径
            String iPath="http://online2.map.bdimg.com/tile/?qt=tile&x=4&y=4&z=5&styles=pl&udt=20171031&scaler=1&p=1";
            try {
                //对资源链接
                URL url=new URL(iPath);
                //打开输入流
                InputStream inputStream=url.openStream();
                //对网上资源进行下载转换位图图片
                bitmap= BitmapFactory.decodeStream(inputStream);

                inputStream.close();

                //再一次打开
                inputStream=url.openStream();
                File file=new File(Environment.getExternalStorageDirectory()+"/haha.gif");
                FileOutputStream fileOutputStream=new FileOutputStream(file);
                int hasRead=0;
                while((hasRead=inputStream.read())!=-1){
                    fileOutputStream.write(hasRead);
                }
                fileOutputStream.close();
                inputStream.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                Log.v("111","2222");
                System.out.println("haha1");
                e.printStackTrace();
                System.out.println("haha2");
            }
        };
    };

启动下载线程的方法如下:

OnClickListener uiListenerCenterView = new OnClickListener() {
        public void onClick(View v) {
            //Log.d(TAG, "Center View");
            osgNativeLib.keyboardDown(32);
            osgNativeLib.keyboardUp(32);
            new Thread(t).start();
        }
    };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值