Android 来自sd卡的文件路径

Android 来自sd卡的文件路径,android,android-intent,Android,Android Intent,我的sd卡上有mp3文件。如何在选择文件时从sd卡获取文件路径 动态的!。。。例如,若用户在列表视图中单击文件,则其路径将进入变量以供使用 public class PlayListActivity extends ListActivity { // Songs list public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, Str

我的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();
            }
        });    
    }
}
公共类播放活动扩展了ListActivity{
//歌曲列表
public ArrayList songsList=new ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.playlist);
ArrayList songsListData=新的ArrayList();
SongsManager plm=新的SongsManager();
//从SD卡获取所有歌曲
this.songsList=plm.getPlayList();
//循环播放列表
对于(int i=0;i
您可以使用获取sd卡根目录作为
文件
对象

我想您想从文件打开对话框获取文件,请查看下面的链接

参考:

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

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "myFile.mp3";
因此,这条道路将是正确的

String path  = baseDir + "/your folder(s)/" + fileName;
参考资料是:

或者您可以尝试:

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

参考资料:

要获取该文件,您应该使用如下内容

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];
}

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

我想这段代码会对你有用。。。试试看,然后告诉我结果

公共类歌曲管理器 {

final String MEDIA\u PATH=new String(“/sdcard/”);
private ArrayList songsList=new ArrayList();
//建造师
公共歌曲管理器(){
}
/**d
*从SD卡读取所有mp3文件的功能
*并将详细信息存储在ArrayList中
* */
公共阵列列表getPlayList(){
文件列表[]=Environment.getExternalStorageDirectory().listFiles();
归档回家;
int指数=0;
while(索引0){
对于(文件:home.listFiles(新的FileExtensionFilter())){
HashMap宋=新HashMap();
song.put(“songTitle”,file.getName().substring(0,(file.getName().length()-4));
put(“songPath”,file.getPath());
//将每首歌曲添加到歌曲列表
歌曲列表。添加(歌曲);
}
索引++;
}
}
//返回歌曲列表数组
返回歌曲列表;
}
/**
*类来筛选扩展名为.mp3的文件
* */
类FileExtensionFilter实现FilenameFilter{
公共布尔接受(文件目录,字符串名称){
return(name.endsWith(“.mp3”)| name.endsWith(“.mp3”);
}
}

}

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

  • 使用内部(在android中调用外部)存储的路径

  • 内存卡

    path="/storage/sdcard1/myfile.txt";
    
  • 在清单文件中提及权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

  • 我已经硬编码了这些值。现在我需要从用户那里获取。我尝试了硬编码的值!。。。现在需要从用户处获取使用audioplayer代码从audioplayer选择文件以播放外部可能不是SD卡
    ContextCompat.getExternalFilesDirs(context,null)
    ,例如,返回外部存储的数组。其中一个“/storage/simulated/”另一个可能是“/storage/86C4-1A0F/”。SD卡是第二个带有符号和破折号的卡。要知道哪一个是SD卡,您可以使用Environment.isExternalStorageRemovable(file),如果它是SD卡,则返回true(当然,如果它是您设备中唯一可移动的东西)
    path="/storage/sdcard1/myfile.txt";
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
    File file=new File(path);
    long=file.length(); //in Bytes