Поток ввода файла не работает на уровне API 29 - PullRequest
0 голосов
/ 04 октября 2019

У меня есть метод, который пытается извлечь файлы m3u, но он не работает на уровне API 29. Я получаю следующую ошибку на экране Logcat:

2019-10-03 20:46:53.165 32591-417/? E/Google: java.io.IOException: Cleartext HTTP traffic to mysite.tk not permitted

Мой метод:

@SuppressLint("StaticFieldLeak")
class _loadFile extends AsyncTask<String, Void, Boolean> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        spinner.setVisibility(View.VISIBLE);
    }

    @Override
    protected Boolean doInBackground(String... strings) {
        try { //new FileInputStream (new File(name)
            is = new FileInputStream(new File(strings[0])); // if u r trying to open file from asstes InputStream is = getassets.open(); InputStream
            M3UPlaylist playlist = parser.parseFile(is);
            mAdapter.update(playlist.getPlaylistItems());

            return true;
        } catch (Exception e) {
            Log.d("Google", "_loadFile: " + e.toString());
            return false;
        }
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        spinner.setVisibility(View.GONE);
    }
}

РЕДАКТИРОВАНИЕ:

Я дал разрешение ClearText, но появилась новая ошибка.

Google: _loadFile: java.io.FileNotFoundException: /storage/emulated/0/Netuptv/data.m3u: open failed: ENOENT (No such file or directory)

РЕДАКТИРОВАНИЕ:

Мой путь к файлу. Я думаю, что проблема здесь. Но у меня нет информации, чтобы решить ее.

   static final File DEFA = Environment.getExternalStorageDirectory();
    public static final File dir = new File(DEFA.getPath() + "/Netuptv");
    static final File filepath = new File(dir.getPath() + "/data.m3u");

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Проверьте, добавили ли вы эту строку android:usesCleartextTraffic="true" в свой манифест.

Поскольку API доступа к файлам устарела в Android Q, я настоятельно рекомендую вам прочитать эту статью от CommaneWare , как уже упоминалось в этой статье, попробуйте использовать android:requestLegacyExternalStorage="true", чтобы избежать проблем с доступом к файлу

Попробуйте выполнить следующее:

        String fileName = "data.m3u";
        File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
                        + "/Netuptv");
        boolean success = true;
        if (!storageDir.exists()) {
            success = storageDir.mkdirs();
        }
        if (success) {
            File file = new File(storageDir,fileName);
            filepath = file.getAbsolutePath();
        }
0 голосов
/ 04 октября 2019

С Android 10 (API-уровень 29) доступ к файлам устарел, он называется scoped storage.

...