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

Posted hankern

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
        
    ;

以上是关于C++学习(四八八)android下载权限及下载崩溃的主要内容,如果未能解决你的问题,请参考以下文章

C++学习(四八七)android studio println的输出位置

C++学习(四八七)android studio println的输出位置

C++学习(四八一)peek

C++学习(四八四)anaconda常用命令

C++学习(四八四)anaconda常用命令

C++学习(四八二)zlib的inflate