常用代码整理:测试时用于下载文件的代码

说明:大部分内容都是参考别的文章,这里做整理是为了以后的编程有实用的模板,可以即需即用。
有时写 Demo 需要从网络下载资源,直接 copy,省时省力…

        new Thread(new Runnable() {
            @Override
            public void run() {
                downloadFile("sound", "ring.mp3", "https://www.xxx.com/ring.mp3");
            }
        }).start();
    /**
     * 下载指定路径的文件,并写入到指定的位置
     *
     * @return 返回0表示下载成功,返回1表示下载出错
     */
    public int downloadFile(String dirName, String fileName, String urlStr) {
        OutputStream output = null;
        try {
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            //定义请求时间,在ANDROID中最好是不好超过10秒。否则将被系统回收。
            conn.setConnectTimeout(6 * 1000);
            //请求成功之后,服务器会返回一个响应码。如果是GET方式请求,服务器返回的响应码是200,post请求服务器返回的响应码是206(貌似)。
            if (conn.getResponseCode() == 200) {
                File file = createFile(dirName, fileName);
                InputStream input = conn.getInputStream();
                output = new FileOutputStream(file);
                byte buffer[] = new byte[4 * 1024];//每次存4K
                int temp;
                //写入数据
                while ((temp = input.read(buffer)) != -1) {
                    output.write(buffer, 0, temp);
                }
                // TODO: file.getAbsolutePath()为文件路径
            }
            output.flush();
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();
                System.out.println("success");
                return 0;
            } catch (IOException e) {
                System.out.println("fail");
                e.printStackTrace();
            }
        }
        return 1;
    }

动态获取权限的代码:

    String[] permissions = new String[]{
            Manifest.permission.CAMERA,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    List<String> mPermissionList = new ArrayList<>();
    private static final int PERMISSION_REQUEST = 1;

    private void checkPermission() {
        mPermissionList.clear();

        //判断哪些权限未授予
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                mPermissionList.add(permissions[i]);
            }
        }
        // 判断是否为空
        if (mPermissionList.isEmpty()) {//未授予的权限为空,表示都授予了

        } else {//请求权限方法
            String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组
            ActivityCompat.requestPermissions(MainActivity.this, permissions, PERMISSION_REQUEST);
        }
    }

    /**
     * 响应授权
     * 这里不管用户是否拒绝,都进入首页,不再重复申请权限
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PERMISSION_REQUEST:
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                break;
        }
    }

参考文章:
1、https://bbs.csdn.net/topics/390792220
2、https://blog.csdn.net/jianesrq0724/article/details/77100942

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章