【问题标题】:File path from sd cardsd卡的文件路径
【发布时间】:2012-11-22 08:36:48
【问题描述】:

我的 sd 卡上有 mp3 文件。选择文件时如何从sd卡获取文件路径?

动态地!...就像用户在列表视图中单击文件时,它的路径进入变量以供使用。

public class PlayListActivity extends ListActivity {
    // Songs list
    public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playlist);    
        ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();    
        SongsManager plm = new SongsManager();
        // get all songs from sdcard
        this.songsList = plm.getPlayList();

        // looping through playlist
        for (int i = 0; i < songsList.size(); i++) {
            // creating new HashMap
            HashMap<String, String> song = songsList.get(i);

            // adding HashList to ArrayList
            songsListData.add(song);
        }    
        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(this, songsListData,
                R.layout.playlist_item, new String[] { "songTitle" }, new int[] {
                        R.id.songTitle });

        setListAdapter(adapter);

        // selecting single ListView item
        ListView lv = getListView();
        // listening to single listitem click
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // getting listitem index
                int songIndex = position;

                // Starting new intent
                Intent in = new Intent(getApplicationContext(),
                        AndroidBuildingMusicPlayerActivity.class);
                // Sending songIndex to PlayerActivity
                in.putExtra("songIndex", songIndex);
                setResult(100, in);
                // Closing PlayListView
                finish();
            }
        });    
    }
}

【问题讨论】:

  • 我尝试了硬编码值!...
  • 现在需要从用户那里获取
  • 使用音频播放器中的代码从音频播放器中选择要播放的文件

标签: android android-intent


【解决方案1】:

我在 4 天后得到了解决方案。在 Android(Java) 中给出 File 类的路径时请注意以下几点:

  1. 使用路径用于内部(在 android 中调用外部)存储

    String path="/storage/sdcard0/myfile.txt";
    
  2. 在内存卡中

    path="/storage/sdcard1/myfile.txt";
    
  3. 在 Manifest 文件中提及权限。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
  4. 首先检查文件长度以确认。

  5. 检查 ES 文件资源管理器中关于 sdcard0 和 sdcard1 的路径是否相同......例如

    File file=new File(path);
    long=file.length(); //in Bytes
    

【讨论】:

    【解决方案2】:

    我认为这段代码对你有用......试试看,然后跟着我结果

    公共类 SongsManager {

    final String MEDIA_PATH = new String("/sdcard/");
    private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    
    // Constructor
    public SongsManager(){
    
    }
    
    /**d
     * Function to read all mp3 files from sdcard
     * and store the details in ArrayList
     * */
    public ArrayList<HashMap<String, String>> getPlayList(){
            File List[] = Environment.getExternalStorageDirectory().listFiles();  
    
        File home;
    
        int index=0;
    
            while(index<List.length)
            {
                home = new File(List[index].getAbsolutePath().toString());
                if (home.listFiles(new FileExtensionFilter()).length > 0) {
                for (File file : home.listFiles(new FileExtensionFilter())) {
    
                    HashMap<String, String> song = new HashMap<String, String>();
                    song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
                    song.put("songPath", file.getPath());
    
                    // Adding each song to SongList
                    songsList.add(song);
                }
                index++;
            }
        }
        // return songs list array
        return songsList;
    }
    
    
    
    /**
     * Class to filter files which are having .mp3 extension
     * */
    class FileExtensionFilter implements FilenameFilter {
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".MP3"));
        }
    }
    

    }

    【讨论】:

      【解决方案3】:

      要获取文件,您应该使用类似这样的东西

      public static byte[] readFile (String file, Context c) throws IOException {
          File f = new
          File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC), file);
          if (f.exists())
              return readFile(f);
          else return new byte[0];
      }
      

      然后你可以用你得到的字节解码文件。

      【讨论】:

        【解决方案4】:

        我认为您想从文件打开对话框中获取文件,请查看以下链接

        参考:Choose File Dialog

        您可以通过以下命令获取 SD 卡的路径:

        String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        String fileName = "myFile.mp3";
        

        所以路径会是

        String path  = baseDir + "/your folder(s)/" + fileName;
        

        参考是:Android how to use Environment.getExternalStorageDirectory()

        或者你可以试试:

        new File("/mnt/external_sd/your folder(s)../file.mp3");//get a file from SD card
        

        参考:How can I get external SD card path for Android 4.0+?

        【讨论】:

        • 外部可能不是 SD 卡。 ContextCompat.getExternalFilesDirs(context, null),例如返回外部存储数组。其中一个是“/storage/emulated/”,另一个可能是“/storage/86C4-1A0F/”。 SD 卡是第二张带有符号和破折号的卡。要知道哪个是 SD 卡,您可以使用 Environment.isExternalStorageRemovable(file) 如果它是 SD 则返回 true(当然,如果它是您设备中唯一可移动的东西)
        【解决方案5】:

        你可以使用getExternalStorageDirectory()来获取sd卡的根作为File对象

        【讨论】:

        • 我已经硬编码了这些值。现在我需要从用户那里获取。
        猜你喜欢
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-12
        • 2020-03-26
        • 1970-01-01
        • 2013-05-17
        • 1970-01-01
        相关资源
        最近更新 更多