2

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

5 に答える 5

7

ファイルを開くダイアログからファイルを取得したいと思います。以下のリンクをチェックしてください

参考:ファイル選択ダイアログ

以下のコマンドを使用して、SD カードのパスを取得できます。

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

したがって、パスは

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

参考:AndroidのEnvironment.getExternalStorageDirectory()の使い方

または、次を試すことができます。

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

参考:Android 4.0以降の外部SDカードのパスを取得するにはどうすればよいですか?

于 2012-12-04T16:56:10.607 に答える
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];
}

次に、取得したバイトでファイルをデコードできます。

于 2012-12-10T16:33:48.380 に答える
0

getExternalStorageDirectory()SDカードのルートをFileオブジェクトとして取得するために使用できます

于 2012-12-04T16:48:13.890 に答える
0

このコードはうまくいくと思います...試してみて、結果をフォローしてください

public class 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"));
    }
}

}

于 2012-12-24T19:43:54.033 に答える
-1

4日後にこれに関する解決策が得られました。Android(Java)で File クラスにパスを指定する際は、次の点に注意してください。

  1. 内部(アンドロイドでは外部を呼び出す)ストレージにパスを使用する

    String path="/storage/sdcard0/myfile.txt";
    
  2. メモリーカードに

    path="/storage/sdcard1/myfile.txt";
    
  3. マニフェスト ファイルに権限を記載します。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
  4. まず、確認のためにファイルの長さを確認してください。

  5. sdcard0 および sdcard1 に関する ES File Explorer のパスを確認してください。

    File file=new File(path);
    long=file.length(); //in Bytes
    
于 2016-09-12T07:07:59.787 に答える