【问题标题】:Read files from my internal storage android phone 6.0.0从我的内部存储 android 手机 6.0.0 读取文件
【发布时间】:2018-09-15 08:38:42
【问题描述】:

我的应用程序从服务器下载 mp3 文件并放入我的内部存储 (/storage/emulated/0) 的下载文件夹中。现在我面临的问题是我无法读取文件并将它们显示在 recyclerview 中。几天来我一直在尝试访问该文件夹,但没有运气。

我的 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 文件。我正在做一个现场项目,我很挣扎。

【问题讨论】:

    标签: php android android-volley


    【解决方案1】:

    您可以使用此代码上传文件:

    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();
        }
    }
    

    【讨论】:

    • 嘿 ronny 我首先使用 url 从服务器下载文件。然后从内部存储中读取文件。
    • 哦,我了解Shashank Verma,哦,在那种情况下,我建议使用ftp而不是下载,效率更高...
    • Ronny Noob 我肯定会使用这种方法,谢谢,但如果你能帮助我如何从内部存储中检索文件名,那将是 gr8 的帮助!
    • 好的,你可以使用这个方法“String getName()”,你可以在这里阅读完整的信息:codejava.net/java-se/networking/ftp/…
    • 罗尼·诺布没有帮助
    【解决方案2】:

    好吧,我自己找到了解决方案! 我们可以通过getExternalFilesDir(DIRECTORY_DOWNLOADS)获取内部存储(Android)的路径。

    例如:文件夹 = new File(getExternalFilesDir(DIRECTORY_DOWNLOADS)+ "/uploads/" );

    更多参考请参考这个链接,它真的很有帮助 http://grishma102.blogspot.com/2014/01/android-storage-system-to-access-path.html

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多