如何在另一个活动中将多个音频文件从android内部/外部存储检索到listview?
我是android编程新手,我试图通过构建一个应用程序来弄脏我的手。我试图从内部或外部存储器中检索多个音频文件MP3,并在另一个活动的列表视图中显示每首歌曲。然后,我希望能够操纵列表中的每首歌曲。我对立即播放这首歌不感兴趣。我只能在另一个活动中获得一个歌曲标题。我现在很困惑,我不知道该怎么办,也不知道该怎么办。任何帮助或指点都将不胜感激 这是我到目前为止的工作。这是非常基本的如何在另一个活动中将多个音频文件从android内部/外部存储检索到listview?,android,Android,我是android编程新手,我试图通过构建一个应用程序来弄脏我的手。我试图从内部或外部存储器中检索多个音频文件MP3,并在另一个活动的列表视图中显示每首歌曲。然后,我希望能够操纵列表中的每首歌曲。我对立即播放这首歌不感兴趣。我只能在另一个活动中获得一个歌曲标题。我现在很困惑,我不知道该怎么办,也不知道该怎么办。任何帮助或指点都将不胜感激 这是我到目前为止的工作。这是非常基本的 public class MainActivity extends AppCompatActivity { privat
public class MainActivity extends AppCompatActivity {
private static final int READ_REQUEST_CODE = 42;
private static final String TAG = "DATA";
Button btnOpenFileExplorer, btnViewTones, btnExit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOpenFileExplorer = findViewById(R.id.btnOpenFileExplorer);
btnViewTones = findViewById(R.id.btnViewSongs);
btnExit = findViewById(R.id.btnExit);
btnOpenFileExplorer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("audio/*");
startActivityForResult(intent, READ_REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
Uri uri = null;
if (data != null) {
uri = data.getData();
Log.i(TAG, "Uri: " + uri.toString());
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
Log.i(TAG, "Display Name: " + displayName);
Intent intent = new Intent(MainActivity.this, SongListActivity.class);
intent.putExtra("Song", displayName);
startActivity(intent);
Toast.makeText(this, "Display Name: " + displayName, Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
cursor.close();
}
}
}
}
}
我使用此代码从自定义位置检索歌曲 通过使用以下代码Context.getContentResolver.queryuri、null、selection、filter、sortOrder
一点解释会有帮助的。Thanks@HappyCat我在职业生涯早期就用它谢谢你。我会试试看。我还在安卓媒体上阅读,以了解这一切。再次感谢您的投入
/**
* Read the songs present in external storage
*
* @param context
* @return
* selection == "your audio selection criteria"
* filter= "your custom audio location (internal/external) "
* sortOrder="your audio list order "
*/
public static ArrayList<MediaItem> listOfSongs(Context context) {
// File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + .......path.... + "/");
// if (!file.exists()) {
//file.mkdir();
// }
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String loc = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "......" + "/";
// Filter only mp3s, only those marked by the MediaStore to be music and longer than 1 minute
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"
+ " AND " + MediaStore.Audio.Media.DATA + " LIKE ? AND " +
MediaStore.Audio.Media.DATA + " NOT LIKE ?";
// + " AND " + MediaStore.Audio.Media.MIME_TYPE + "= 'audio/mpeg'";
// + " AND " + MediaStore.Audio.Media.DURATION + " > 60000";
String sortOrder = MediaStore.Audio.AudioColumns.TITLE
+ " COLLATE LOCALIZED ASC";
String test = MediaStore.Audio.Media.DATA + " LIKE ? AND " +
MediaStore.Audio.Media.DATA + " NOT LIKE ?";
// String[] test1 = new String[]{loc + "%", loc + "%/%"};
String[] filter = new String[]{loc + "%", loc + "%/%"};
Log.d(TAG, "Songs: loc " + loc);
Cursor c = context.getContentResolver().query(uri, null, selection, filter, sortOrder);
ArrayList<MediaItem> listOfSongs = new ArrayList<MediaItem>();
try {
// c.moveToFirst();
while (c.moveToNext()) {
MediaItem songData = new MediaItem();
String title = c.getString(c.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String album = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM));
long duration = c.getLong(c.getColumnIndex(MediaStore.Audio.Media.DURATION));
String data = c.getString(c.getColumnIndex(MediaStore.Audio.Media.DATA));
long albumId = c.getLong(c.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
String composer = c.getString(c.getColumnIndex(MediaStore.Audio.Media.COMPOSER));
songData.setTitle(title);
songData.setAlbum(album);
songData.setArtist(artist);
songData.setDuration(duration);
songData.setPath(data);
songData.setAlbumId(albumId);
songData.setComposer(composer);
listOfSongs.add(songData);
}
c.close();
} catch (Exception e) {
Log.d(TAG, "listOfSongs() " + e.getMessage());
}
Log.d(TAG, "listOfSongs: size :" + listOfSongs.size());
return listOfSongs;
}
public class MediaItem {
String title;
String artist;
String album;
String path;
long duration;
long albumId;
String composer;
@Override
public String toString() {
return title;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
public long getAlbumId() {
return albumId;
}
public void setAlbumId(long albumId) {
this.albumId = albumId;
}
public String getComposer() {
return composer;
}
public void setComposer(String composer) {
this.composer = composer;
}
}