2010-09-01 38 views

Trả lời

6

Không có documented method để nhận thông tin về tệp hiện đang phát từ phiên bản MediaPlayer, bạn sẽ cần phải làm cho ứng dụng lưu trữ thông tin đó theo cách khác. Nếu bạn đang sử dụng một Dịch vụ để theo dõi trường hợp MediaPlayer của bạn (mà tôi khuyên bạn nên) thì điều này không quá khó.

+0

Hi Fredley, Cảm ơn bạn đã đề xuất của bạn. – Eby

+0

Tôi có thể thấy nhiều tiện ích con hiển thị chi tiết bài hát như bạn thấy trong http://developer.android.com/guide/topics/appwidgets/index.html tiện ích con này. – Eby

+1

Có. Và? Tiện ích âm nhạc được thiết kế để tích hợp với một trình phát nào đó và bạn không thể làm cho tiện ích của riêng mình dễ dàng tích hợp với trình phát đa phương tiện khác. – fredley

0

Tôi nghĩ rằng bạn cần phải có các lớp học mô hình của riêng bạn từ đó bạn có thể đặt và nhận tiêu đề bài hát của mình. Để biết thông tin này và các thông tin khác, hãy xem câu hỏi Stack Overflow:
How to set the PlayList Index for Mediaplayer(ExpressionMediaPlayer:Mediaplayer).

Nếu bạn muốn biết nó đang được triển khai như thế nào, bạn có thể lấy số source và xem cách chúng đã triển khai.

11

Chỉ cần để tham khảo, công trình này:

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.util.Log; 

public class MediaPlayer extends Activity { 

public static final String SERVICECMD = "com.android.music.musicservicecommand"; 
public static final String CMDNAME = "command"; 
public static final String CMDTOGGLEPAUSE = "togglepause"; 
public static final String CMDSTOP = "stop"; 
public static final String CMDPAUSE = "pause"; 
public static final String CMDPREVIOUS = "previous"; 
public static final String CMDNEXT = "next"; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
IntentFilter iF = new IntentFilter(); 
iF.addAction("com.android.music.metachanged"); 
iF.addAction("com.android.music.playstatechanged"); 
iF.addAction("com.android.music.playbackcomplete"); 
iF.addAction("com.android.music.queuechanged"); 

registerReceiver(mReceiver, iF); 
} 

private BroadcastReceiver mReceiver = new BroadcastReceiver() { 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
String action = intent.getAction(); 
String cmd = intent.getStringExtra("command"); 
Log.d("mIntentReceiver.onReceive ", action + "/" + cmd); 
String artist = intent.getStringExtra("artist"); 
String album = intent.getStringExtra("album"); 
String track = intent.getStringExtra("track"); 
Log.d("Music",artist+":"+album+":"+track); 
} 
}; 
} 
+0

Tôi không có bất kỳ đăng ký nào cho người phát sóng (sử dụng mã của bạn) và sau đó phát một MP3 với MediaPlayer - không có phát sóng nào được nhận! –

+0

chỉ hoạt động với Google Play Âm nhạc. Làm thế nào tôi có thể nhận được thông tin cho người chơi khác trong khi chơi? –

-1

Tôi đã học được làm thế nào để làm điều đó ngay bây giờ, vì vậy tôi không biết nếu nó hoạt động trên tất cả các phiên bản của Android được nêu ra.

private void getTrackInfo(Uri audioFileUri) { 
    MediaMetadataRetriever metaRetriever= new MediaMetadataRetriever(); 
    metaRetriever.setDataSource(getRealPathFromURI(audioFileUri)); 
    String artist = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 
    String title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 

} 


private String getRealPathFromURI(Uri uri) { 
    File myFile = new File(uri.getPath().toString()); 
    String s = myFile.getAbsolutePath(); 
    return s; 
} 
+0

Câu hỏi OP là truy xuất chi tiết bài hát đang phát trong đối tượng MediaPlayer. Đây là một câu trả lời khác. –

Các vấn đề liên quan