我在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();
}
});
}
}
答案 0 :(得分:7)
我想你想从文件打开对话框中获取文件,请查看以下链接
您可以借助以下命令获取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
答案 1 :(得分:0)
您可以使用getExternalStorageDirectory()
将SD卡的根目录作为File
对象
答案 2 :(得分:0)
要获取文件,您应该使用类似这样的文件
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];
}
然后你可以用你得到的字节解码文件。
答案 3 :(得分:0)
我认为此代码可以与您合作...尝试并跟随我的结果
公共类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"));
}
}
}
答案 4 :(得分:0)
我在4天后得到了解决方案。在Android(Java)中提供File类的路径时请注意以下几点:
使用内部路径(在android中调用外部)存储
String path="/storage/sdcard0/myfile.txt";
path="/storage/sdcard1/myfile.txt";
在清单文件中提及权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
首先检查文件长度以确认。
检查ES文件资源管理器中有关sdcard0&amp;的路径。 sdcard1与此相同或者......例如
File file=new File(path);
long=file.length(); //in Bytes