Android
MediaStore
サーチ…
デバイスの特定のフォルダからオーディオ/ MP3ファイルをフェッチするか、すべてのファイルをフェッチする
まず、デバイスのストレージアクセスを有効にするために、プロジェクトのマニフェストに次の権限を追加します。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
次に、 AudioModel.classファイルを作成し、リスト項目の取得と設定を可能にするために、次のモデルクラスをその中に配置します。
public class AudioModel {
String aPath;
String aName;
String aAlbum;
String aArtist;
public String getaPath() {
return aPath;
}
public void setaPath(String aPath) {
this.aPath = aPath;
}
public String getaName() {
return aName;
}
public void setaName(String aName) {
this.aName = aName;
}
public String getaAlbum() {
return aAlbum;
}
public void setaAlbum(String aAlbum) {
this.aAlbum = aAlbum;
}
public String getaArtist() {
return aArtist;
}
public void setaArtist(String aArtist) {
this.aArtist = aArtist;
}
}
次に、次の方法を使用して、デバイスのフォルダからすべてのMP3ファイルを読み込むか、デバイスのすべてのファイルを読み込みます。
public List<AudioModel> getAllAudioFromDevice(final Context context) {
final List<AudioModel> tempAudioList = new ArrayList<>();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Audio.AudioColumns.DATA, MediaStore.Audio.AudioColumns.TITLE, MediaStore.Audio.AudioColumns.ALBUM, MediaStore.Audio.ArtistColumns.ARTIST,};
Cursor c = context.getContentResolver().query(uri, projection, MediaStore.Audio.Media.DATA + " like ? ", new String[]{"%utm%"}, null);
if (c != null) {
while (c.moveToNext()) {
AudioModel audioModel = new AudioModel();
String path = c.getString(0);
String name = c.getString(1);
String album = c.getString(2);
String artist = c.getString(3);
audioModel.setaName(name);
audioModel.setaAlbum(album);
audioModel.setaArtist(artist);
audioModel.setaPath(path);
Log.e("Name :" + name, " Album :" + album);
Log.e("Path :" + path, " Artist :" + artist);
tempAudioList.add(audioModel);
}
c.close();
}
return tempAudioList;
}
上記のコードは、音楽の名前、パス、アーティスト、アルバムを含むすべてのMP3ファイルのリストを返します。詳細については、 Media.Store.Audioのドキュメントを参照してください。
特定のフォルダのファイルを読み込むには、次のクエリを使用します(フォルダ名を置き換える必要があります)。
Cursor c = context.getContentResolver().query(uri,
projection,
MediaStore.Audio.Media.DATA + " like ? ",
new String[]{"%yourFolderName%"}, // Put your device folder / file location here.
null);
デバイスからすべてのファイルを取得する場合は、次のクエリを使用します。
Cursor c = context.getContentResolver().query(uri,
projection,
null,
null,
null);
注:ストレージアクセス許可を有効にすることを忘れないでください。
さて、あなたがしなければならないのは、上記のメソッドを呼び出してMP3ファイルを取得することだけです。
getAllAudioFromDevice(this);
アクティビティの例
public class ReadAudioFilesActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio_list);
/**
* This will return a list of all MP3 files. Use the list to display data.
*/
getAllAudioFromDevice(this);
}
// Method to read all the audio/MP3 files.
public List<AudioModel> getAllAudioFromDevice(final Context context) {
final List<AudioModel> tempAudioList = new ArrayList<>();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Audio.AudioColumns.DATA,MediaStore.Audio.AudioColumns.TITLE ,MediaStore.Audio.AudioColumns.ALBUM, MediaStore.Audio.ArtistColumns.ARTIST,};
Cursor c = context.getContentResolver().query(uri, projection, MediaStore.Audio.Media.DATA + " like ? ", new String[]{"%utm%"}, null);
if (c != null) {
while (c.moveToNext()) {
// Create a model object.
AudioModel audioModel = new AudioModel();
String path = c.getString(0); // Retrieve path.
String name = c.getString(1); // Retrieve name.
String album = c.getString(2); // Retrieve album name.
String artist = c.getString(3); // Retrieve artist name.
// Set data to the model object.
audioModel.setaName(name);
audioModel.setaAlbum(album);
audioModel.setaArtist(artist);
audioModel.setaPath(path);
Log.e("Name :" + name, " Album :" + album);
Log.e("Path :" + path, " Artist :" + artist);
// Add the model object to the list .
tempAudioList.add(audioModel);
}
c.close();
}
// Return the list.
return tempAudioList;
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow