Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在另一个活动中将多个音频文件从android内部/外部存储检索到listview?_Android - Fatal编程技术网

如何在另一个活动中将多个音频文件从android内部/外部存储检索到listview?

如何在另一个活动中将多个音频文件从android内部/外部存储检索到listview?,android,Android,我是android编程新手,我试图通过构建一个应用程序来弄脏我的手。我试图从内部或外部存储器中检索多个音频文件MP3,并在另一个活动的列表视图中显示每首歌曲。然后,我希望能够操纵列表中的每首歌曲。我对立即播放这首歌不感兴趣。我只能在另一个活动中获得一个歌曲标题。我现在很困惑,我不知道该怎么办,也不知道该怎么办。任何帮助或指点都将不胜感激 这是我到目前为止的工作。这是非常基本的 public class MainActivity extends AppCompatActivity { privat

我是android编程新手,我试图通过构建一个应用程序来弄脏我的手。我试图从内部或外部存储器中检索多个音频文件MP3,并在另一个活动的列表视图中显示每首歌曲。然后,我希望能够操纵列表中的每首歌曲。我对立即播放这首歌不感兴趣。我只能在另一个活动中获得一个歌曲标题。我现在很困惑,我不知道该怎么办,也不知道该怎么办。任何帮助或指点都将不胜感激

这是我到目前为止的工作。这是非常基本的

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