3

現在再生中の音楽を別のデバイスにストリーミングするアプリを作成したいと考えています。2 つのデバイス間の接続は機能し、wifi 経由でいくつかの文字列をストリーミングすることもできますが、現在のトラックを取得する際に問題が発生しました。

このブログのコードを使用して、現在再生中のトラックの情報を取得しましたが、ファイルへのパスを取得できませんでした。

アルバム、トラック、またはアーティストを受け取ったときにパスを取得できるはずだと思います。しかし、私は試してみましたが、何も見つかりませんでした。だから私は尋ねています:レシーバーを介してパスを取得することさえ可能ですか?そうでない場合、現在のトラックとそのパスを取得する別の方法はありますか?

4

1 に答える 1

4

私はこれをたくさん検索しましたが、多くの解決策を見つけましたが、うまくいきませんでした.最後に、既存のすべての解決策を組み合わせて使用​​しましたが、うまくいきました. アプリに他のすべてのプレーヤーを追加する必要があります。その後、現在再生中の曲のタイトルが返されます (曲にタイトルがない場合はファイル名が返されます)。

intent.getStringExtra("track")

最後に、この特定の曲をクエリすると、この曲に関するすべての情報にアクセスできます。もちろん、パスです。うまくいくかどうか教えてください。

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();
            }
        }
    }
  };
}
于 2015-12-14T14:07:35.853 に答える