Чтение файлов из моего внутреннего хранилища телефона Android 6.0.0 - PullRequest
0 голосов
/ 15 сентября 2018

Мое приложение загружает файлы mp3 с сервера и помещает в папку загрузок моего внутреннего хранилища (/ storage / emulated / 0). Теперь проблема, с которой я сталкиваюсь, заключается в том, что я не могу читать файлы и отображать их в окне повторного использования. Уже давно я пытаюсь получить доступ к папке, но не повезло.

Мой файл MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static  final String URL = "http://myurl.com/mylanguage/a_displays.php";

    private RecyclerView recyclerView;
    private RecyclerView.Adapter adapter;

    private List<Radio> radioList;
     ProgressDialog progressDialog;
    long queueid;
    DownloadManager dm;
            private MediaPlayer mediaplayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        radioList = new ArrayList<>();

        mediaplayer = new MediaPlayer();
        adapter = new RadioAdapter(radioList,this);

        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {

                    DownloadManager.Query req_query = new DownloadManager.Query();
                    req_query.setFilterById(queueid);

                    Cursor c = dm.query(req_query);

                    if (c.moveToFirst()) {
                        int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);

                        if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {

                            String uriString= c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));

                            String path = Environment.DIRECTORY_DOWNLOADS;
                            String path1 = getFilesDir()
                                    + File.separator + path + File.separator;


                            Log.d("PathFile", path1);

                            File dir = Environment.getExternalStorageDirectory();
                            String pather = dir.getAbsolutePath();

                              Log.d("Pather", String.valueOf(pather));
                            final File folder = Environment.getExternalStorageDirectory() ;
                                                    Log.d("asd", String.valueOf(folder));
                            listFilesForFolder(folder);
                            adapter.notifyDataSetChanged();
                        }

                    }

                }
            }
        };

        registerReceiver(receiver,new IntentFilter((DownloadManager.ACTION_DOWNLOAD_COMPLETE)));

        String codeValue = getIntent().getStringExtra("CODEINTENT");
        datadummy(codeValue);
        recyclerView.setAdapter(adapter);

    }
    public void listFilesForFolder(final File folder) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);
            } else {
                System.out.println(fileEntry.getName());
            }
        }
    }

    public void datadummy(final String codeVal) {

        StringRequest stringRequest = new StringRequest(Request.Method.POST,URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response){
                        try {
                            JSONArray array = new JSONArray(response);

                            for (int i = 0; i < array.length(); i++) {


                                Log.d("MusicName", String.valueOf(array.getJSONObject(i).getString("audio_sound")));

                                final String music_uri = "http://myurl.com/mylanguage/" + array.getJSONObject(i).getString("audio_sound");

                                Uri uri = Uri.parse(music_uri);

                                dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                                DownloadManager.Request request = new DownloadManager.Request(uri);

                                String.valueOf(request.setDestinationInExternalFilesDir(MainActivity.this,
                                        Environment.DIRECTORY_DOWNLOADS,
                                        String.valueOf(array.getJSONObject(i).getString("audio_sound"))));
                                queueid = dm.enqueue(request);
                            }


                            Log.d("-response",response);


                        }catch (JSONException e){
                            e.printStackTrace();
                            Log.d("Main", "JsonException: " + e);
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }

        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("album_code", codeVal);
                return params;
            }
        };

        RequestQueue requestqueue = Volley.newRequestQueue(this);
        requestqueue.add(stringRequest);
    }
}

Я перепробовал почти все способы. Затем мне нужно воспроизвести эти mp3-файлы. Я работаю над живым проектом и много борюсь.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Ну, я сам нашел решение! Мы можем получить путь к Внутреннему хранилищу (Android), используя getExternalFilesDir (DIRECTORY_DOWNLOADS).

Например: папка файла = новый файл (getExternalFilesDir (DIRECTORY_DOWNLOADS) + "/ uploads /");

Для получения дополнительной ссылки обратитесь по этой ссылке, это действительно полезно http://grishma102.blogspot.com/2014/01/android-storage-system-to-access-path.html

Спасибо!

0 голосов
/ 15 сентября 2018

Вы можете использовать этот код для загрузки файлов:

public void goforIt(){
        FTPClient con = null;
        try
        {
            con = new FTPClient();
            con.connect("192.168.2.57");

            if (con.login("Administrator", "KUjWbk"))
            {
                con.enterLocalPassiveMode(); // important!
                con.setFileType(FTP.BINARY_FILE_TYPE);
                String data = "/sdcard/vivekm4a.m4a";

                FileInputStream in = new FileInputStream(new File(data));
                boolean result = con.storeFile("/vivekm4a.m4a", in);
                in.close();
                if (result) Log.v("upload result", "succeeded");
                con.logout();
                con.disconnect();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

И для загрузки вы можете использовать это:

public void goforIt(){
    FTPClient con = null;
    try
    {
        con = new FTPClient();
        con.connect("192.168.2.57");
        if (con.login("Administrator", "KUjWbk"))
        {
            con.enterLocalPassiveMode(); // important!
            con.setFileType(FTP.BINARY_FILE_TYPE);
            String data = "/sdcard/vivekm4a.m4a";
            OutputStream out = new FileOutputStream(new File(data));
            boolean result = con.retrieveFile("vivekm4a.m4a", out);
            out.close();
            if (result) Log.v("download result", "succeeded");
            con.logout();
            con.disconnect();
        }
    }
    catch (Exception e)
    {
        Log.v("download result","failed");
        e.printStackTrace();
    }
}
...