Ошибка открытия: ошибка EACCES (В доступе отказано) - PullRequest
0 голосов
/ 04 апреля 2020

Я загружаю файл из inte rnet в фоновом потоке. Я объявляю разрешения, а также спрашиваю разрешения во время выполнения, но все же получаю это исключение. Я много искал об этом, и все, что я получаю, это спрашиваю разрешение во время выполнения, и я сделал это. Это моя функция onclick

    String[] permission ={Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};

    if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
            && ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ActivityCompat.requestPermissions(MainActivity.this, permission, 1);
        }
    } else
    {
        new DownloadFileFromURL().execute(url,name);
    }

Это моя асин c задача

    class DownloadFileFromURL extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Resources res =getResources();
            Drawable drawable = res.getDrawable(R.drawable.circular);
            mProgress.setProgress(0);   // Main Progress
            mProgress.setSecondaryProgress(100); // Secondary Progress
            mProgress.setMax(100); // Maximum Progress
            mProgress.setProgressDrawable(drawable);
        }

        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                URL url = new URL(f_url[0]);
                String name= f_url[1];
                URLConnection conection = url.openConnection();
                conection.connect();

                int lenghtOfFile = conection.getContentLength();
                InputStream input = new BufferedInputStream(url.openStream(),
                        8192);
                OutputStream output = new FileOutputStream(Environment
                        .getExternalStorageDirectory().toString()
                        + name+".apk");

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));

                    output.write(data, 0, count);
                }

                output.flush();

                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }

            return null;
        }

        protected void onProgressUpdate(final String... progress) {

            new Thread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    while (pStatus < 100) {
                        pStatus = Integer.parseInt(progress[0]);

                        handler.post(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                mProgress.setProgress(pStatus);
                                tv.setText(pStatus + "%");

                            }
                        });
                    }
                }
            }).start();
        }


        @Override
        protected void onPostExecute(String file_url) {

        }

    }

Я думаю, что есть некоторые другие проблемы, которые я объявил, прочитайте внешнее и запишите внешнее хранилище в манифесте тоже

1 Ответ

0 голосов
/ 08 апреля 2020

вы должны заменить

OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().toString()+ name+".apk");

Напишите это в своем коде

OutputStream output = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), name+".apk"));
...