常用代碼整理:測試時用於下載文件的代碼

說明:大部分內容都是參考別的文章,這裏做整理是爲了以後的編程有實用的模板,可以即需即用。
有時寫 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

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