2012-05-09 47 views
31

我正在實施與獲取當前音樂曲目信息相關的應用程序。當前播放音樂的曲目信息

我使用下面的代碼來獲取:

public class CurrentMusicTrackInfoActivity extends Activity { 

    public static final String SERVICECMD = "com.android.music.musicservicecommand"; 

    @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.v("tag ", action + "/" + cmd); 
      String artist = intent.getStringExtra("artist"); 
      String album = intent.getStringExtra("album"); 
      String track = intent.getStringExtra("track"); 
      Log.v("tag", artist + ":" + album + ":" + track); 
      Toast.makeText(CurrentMusicTrackInfoActivity.this, track, Toast.LENGTH_SHORT).show(); 
     } 
    }; 

} 

那也只是一些手機工作正常。我想實現代碼以獲取所有Android設備(例如HTC和三星設備)中的當前音樂曲目信息。

有沒有辦法做到這一點?

+1

我有一個問題,這個對ICS。我正在爲ICS製作媒體播放器小部件。只要我推出我的第一個小部件,並且是本地播放器播放的一些音樂,我就會在正確的歌曲細節中獲得metachange意圖,並在幾毫秒內獲得playstate改變的意圖,並帶有一些其他歌曲名稱。任何想法如何解決這個問題? – AndroidGuy

+0

提供樣本獲取carrect正在播放歌曲的詳細信息 – kiran

+0

對不起,但我沒有得到你基蘭,我使用上面提到的相同的代碼。我的onReceive被調用兩次,一次用於com.android.music.metachanged&立即用於com.android.music.playstatechanged,但是我從這兩種意圖得到的軌道是不同的。 MetaChanged提供了正確的名稱,但「播放狀態」更改提供了不同的名稱。這隻發生在初次發射。我如何繞過Playstate更改的第一次啓動。 – AndroidGuy

回答

6

這可能有幫助。我使用的音頻文件這讓元數據在我的應用程序之一:

String scheme = mAudioUri.getScheme(); 
String title = ""; 
String artist = ""; 
if(scheme.equals("content")) { 
    String[] proj = {MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST}; 
    Cursor cursor = this.getContentResolver().query(mAudioUri, proj, null, null, null); 
    if(cursor != null && cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     if(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE) != -1) { 
      title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)); 
      artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); 
     } 
    } 
} 

有很多中,你可以用它來找到你要找什麼,因爲我覺得MediaStore.Audio.Media類列。

+0

上述代碼是否從第三方音樂播放器或僅Android默認音樂播放器捕獲音樂細節? – tamil

+0

它從一個標準的媒體文件捕獲音樂細節,我認爲它基於ID3標籤而不是任何程序播放該文件。 – JMRboosties

+0

想用這個協助我嗎? – Broak

46

檢查這這是我在我的應用程序的工作以及使用

iF.addAction("com.android.music.metachanged"); 

    iF.addAction("com.htc.music.metachanged"); 

    iF.addAction("fm.last.android.metachanged"); 
    iF.addAction("com.sec.android.app.music.metachanged"); 
    iF.addAction("com.nullsoft.winamp.metachanged"); 
    iF.addAction("com.amazon.mp3.metachanged");  
    iF.addAction("com.miui.player.metachanged");   
    iF.addAction("com.real.IMP.metachanged"); 
    iF.addAction("com.sonyericsson.music.metachanged"); 
    iF.addAction("com.rdio.android.metachanged"); 
    iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); 
    iF.addAction("com.andrew.apollo.metachanged"); 
+0

它的工作:)謝謝。另外,當我使用我的「Samsung Galaxy Note5」進行測試時,會調用「com.android.music.metachanged」。 – iroiroys

3

亞馬遜MP3(建設2.8.1)似乎有前綴與com.amazon.mp3的額外所以com.amazon.mp3 .metachanged我用:

String artist = ""; 
    String track = ""; 
    if (action.equals("com.amazon.mp3.metachanged")) { 
     artist = intent.getStringExtra("com.amazon.mp3.artist"); 
     track = intent.getStringExtra("com.amazon.mp3.track"); 
    } else { 
     artist = intent.getStringExtra("artist"); 
     track = intent.getStringExtra("track"); 

    } 

這是方便檢查額外的名字:

Set<String> extrasList = intent.getExtras().keySet(); 

    for (String str : extrasList) { 
     Log.d(TAG, str); 
    } 
+0

對此表示感謝,至今仍準確:) –

2
import com.example.media.R; 
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.widget.Toast; 

public class CurrentMusicTrackInfoActivity extends Activity { 

    public static final String SERVICECMD = "com.android.music.musicservicecommand"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     IntentFilter iF = new IntentFilter(); 

     iF.addAction("com.android.music.metachanged"); 
     iF.addAction("com.htc.music.metachanged"); 
     iF.addAction("fm.last.android.metachanged"); 
     iF.addAction("com.sec.android.app.music.metachanged"); 
     iF.addAction("com.nullsoft.winamp.metachanged"); 
     iF.addAction("com.amazon.mp3.metachanged");  
     iF.addAction("com.miui.player.metachanged");   
     iF.addAction("com.real.IMP.metachanged"); 
     iF.addAction("com.sonyericsson.music.metachanged"); 
     iF.addAction("com.rdio.android.metachanged"); 
     iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); 
     iF.addAction("com.andrew.apollo.metachanged"); 

     registerReceiver(mReceiver, iF); 
    } 

    private BroadcastReceiver mReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      String track = intent.getStringExtra("track");   
      Toast.makeText(CurrentMusicTrackInfoActivity.this, track, Toast.LENGTH_SHORT).show(); 
     } 
    }; 

} 

有我我的Xperia索拉設備上運行,但停止任何錯誤,請幫我

+0

如果我可能提出建議,對代碼所做的某些說明可能有助於提問者。 –

相關問題