0
원시 디렉토리에 두 개의 MP3 파일이 있습니다.MediaMetadataRetriever는 항상 동일한 메타 데이터를 표시합니다.
2 개의 mp3 파일 중 하나를 무작위로 선택하여 재생하기 시작하면 노래의 메타 정보 (아티스트 및 제목)가 표시됩니다. 그러나 buttom을 다시 누르고 다른 노래가 연주되기 시작하면 메타 데이터는 (첫 번째 노래의) 여전히 동일합니다. 노래가 변경되면 변경되지 않습니다. 내 코드는 다음과 같습니다.
public class MainActivity extends Activity {
Button playList_Black;
TextView textView;
MediaPlayer mp;
ImageView cover;
Random r = new Random();
int [] playlist_Black = {R.raw.music_a, R.raw.music_b};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
playList_Black = (Button)findViewById(R.id.btn_black);
textView = (TextView)findViewById(R.id.textView1);
cover = (ImageView)findViewById(R.id.imageView1);
}
@SuppressLint("NewApi")
protected String loadMp3DataFile(int i, Context context) {
String mp3_parameter;
String uriPath = "android.resource://" + getPackageName() + "/raw/" +
getResources().getResourceEntryName(i);
Uri uri = Uri.parse(uriPath);
// load data file
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(context, uri);
String artist = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
Log.e("artist2: ", artist);
String title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
byte[] songCover = metaRetriever.getEmbeddedPicture();
if(songCover != null) {
cover.setImageBitmap(BitmapFactory.decodeByteArray(songCover, 0, songCover.length));
}
else {
cover.setImageResource(R.drawable.ic_launcher);
}
//return parameter
mp3_parameter = (artist + "\n" + title);
// close object
metaRetriever.release();
return mp3_parameter;
}
public void PlayMusic(int playlist) {
if(mp != null) {
if(mp.isPlaying()){
mp.stop();
mp.reset();
mp = MediaPlayer.create(getApplicationContext(), playlist);
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.start();
}
else if(mp.isPlaying() == false) {
mp = MediaPlayer.create(getApplicationContext(), playlist);
mp.start();
}
}
else {
mp = MediaPlayer.create(getApplicationContext(), playlist);
mp.start();
}
}
public void PlaylistBlack(View v) {
int i = playlist_Black[r.nextInt(playlist_Black.length)];
textView.setText(loadMp3DataFile(i, getApplicationContext()));
Log.e("Ausgabe: ", "" + i);
Log.e("Ausgabe: ", "" + getResources().getResourceEntryName(i));
PlayMusic(i);
}
내가 뭘 잘못하고 있니? 모든 해결책과 조언? 미리 감사드립니다.
추가 자료 : 코드가 정확하며 에뮬레이터에서 제대로 작동합니다. 하지만 내 스마트 폰에서 프로젝트를 실행할 때, 나는 위에서 언급 한 문제가있다. 동일한 문자열 만 표시합니다. 내가 무엇을 할 수 있을지? – user1953173