2013-02-02 118 views
2

我想編寫一個應用程序將當前正在播放的音樂串流到其他設備。 這兩個設備之間的連接確實有效,我也可以通過wifi傳輸一些字符串,但是我得到了當前曲目的問題。如何獲取Android上當前播放曲目的路徑

我使用this blog的代碼來獲取當前播放曲目的一些信息,但我無法獲取文件的路徑。

我認爲應該有可能在我收到專輯,曲目或藝術家時獲得路徑。但我嘗試過,沒有找到任何東西。所以我問:是否有可能通過接收器獲得路徑?如果不是有另一種方式來獲得當前的軌道和路徑?

+0

有成千上萬的音樂播放應用程序的機器人的。這些大約零點發布「當前播放曲目」信息。 – CommonsWare

+0

那麼爲什麼我會收到有關藝術家,專輯和曲目的信息?這怎麼可能 ? – user1959425

+0

嘿@commonsware,是不是應該在Google Play服務客戶端庫中包含這些內容? (順便說一下,Google的「Play音樂」應用程序幾乎是我國唯一可下載的音樂應用程序 - 潘多拉盒子等僅適用於美國) – Gabor

回答

3

我已經爲此搜尋了很多,我發現了很多解決方案,但他們並沒有爲我工作。最後,我使用了所有現有解決方案的組合,它的工作。 你要添加的所有其他玩家在你的app.Then它將返回當前播放歌曲的標題(它會返回文件名,如果你的歌沒有標題)爲您:

intent.getStringExtra("track") 

最後詢問這個特定的歌曲,你可以訪問有關這首歌的所有信息,當然這是我path.Let如果它適用於you.This工作對我來說:

public class GetMusic extends AppCompatActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.get_music); 

    IntentFilter iF = new IntentFilter(); 
    iF.addAction("com.android.music.playstatechanged"); 
    iF.addAction("com.htc.music.playstatechanged"); 
    iF.addAction("fm.last.android.playstatechanged"); 
    iF.addAction("com.sec.android.app.music.playstatechanged"); 
    iF.addAction("com.nullsoft.winamp.playstatechanged"); 
    iF.addAction("com.amazon.mp3.playstatechanged"); 
    iF.addAction("com.miui.player.playstatechanged"); 
    iF.addAction("com.real.IMP.playstatechanged"); 
    iF.addAction("com.sonyericsson.music.playstatechanged"); 
    iF.addAction("com.rdio.android.playstatechanged"); 
    iF.addAction("com.samsung.sec.android.MusicPlayer.playstatechanged"); 
    iF.addAction("com.andrew.apollo.playstatechanged"); 
    iF.addAction("gonemad.dashclock.music.playstatechanged"); 
    iF.addAction("com.piratemedia.musicmod.playstatechanged"); 
    iF.addAction("com.tbig.playerpro.playstatechanged"); 
    iF.addAction("org.abrantix.rockon.rockonnggl.playstatechanged"); 
    iF.addAction("com.maxmpz.audioplayer.playstatechanged"); 
    iF.addAction("com.doubleTwist.androidPlayer.playstatechanged"); 
    iF.addAction("com.lge.music.playstatechanged"); 
    registerReceiver(mReceiver, iF); 
    } 
    private BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Uri mAudioUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     String selection = MediaStore.Audio.Media.TITLE + " == \"" + intent.getStringExtra("track") + "\""; 
     String[] STAR = { "*" }; 
     Cursor cursor = getContentResolver().query(mAudioUri,STAR, selection, null, null); 
     if (cursor != null && cursor.getCount() > 0) { 
      cursor.moveToFirst(); 
      if (cursor.getColumnIndex(MediaStore.Audio.Media.TITLE) != -1) { 
       String fullpath = cursor.getString(cursor 
         .getColumnIndex(MediaStore.Audio.Media.DATA)); 
       Toast.makeText(getApplicationContext(),"song path: " + fullpath,Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
    }; 
} 
相關問題