私はClementineを音楽プレーヤーとして使用しています。JavaでD-Bus MPRISを使用してClementineインスタンスにアクセスする
D-Busコマンドで制御できます。コマンドラインで、qdbusを使用して、私がすることができます:
- スタート
- ストップ
- プレイリスト内の現在再生中のトラックとそのメタデータを確認します。
これはJavaプログラムで行います。私は物事を働かせようとしましたが、何とか私はそれを理解していないので、自分のプログラムに使用できるサンプルコードを見つけることができません。ここで
はあなたのサービス名エトセトラのアイデアを与えるために、qdbusを使用したサンプルセッションです:
$ qdbus org.mpris.clementine /TrackList
method int org.freedesktop.MediaPlayer.AddTrack(QString, bool)
method void org.freedesktop.MediaPlayer.DelTrack(int)
method int org.freedesktop.MediaPlayer.GetCurrentTrack()
method int org.freedesktop.MediaPlayer.GetLength()
method QVariantMap org.freedesktop.MediaPlayer.GetMetadata(int)
method void org.freedesktop.MediaPlayer.PlayTrack(int)
method void org.freedesktop.MediaPlayer.SetLoop(bool)
method void org.freedesktop.MediaPlayer.SetRandom(bool)
signal void org.freedesktop.MediaPlayer.TrackListChange(int)
method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name)
method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name)
method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value)
method QString org.freedesktop.DBus.Introspectable.Introspect()
$ qdbus org.mpris.clementine /TrackList GetLength
13
$ qdbus org.mpris.clementine /TrackList GetCurrentTrack
7
$ qdbus org.mpris.clementine /TrackList GetMetadata 7
album: On The Wires Of Our Nerves
artist: Add N To X
audio-bitrate: 224
audio-samplerate: 44100
genre: Other
location: /media/nas-media/Music/Add_N_to_X/On_The_Wires_Of_Our_Nerves/08-King_Wasp.ogg
mtime: 215000
time: 215
title: King Wasp
tracknumber: 8
year: 1998
私だけのプレイリストに現在再生中のトラックの数を出力するプログラムを作成しようとしています。私は最初のインターフェイスを作成するために必要なと思ったので、私のようなものを作成しました:その後、私はこのようなテストでこれを使用
package my.package;
import org.freedesktop.dbus.DBusInterface;
import org.freedesktop.dbus.DBusInterfaceName;
@DBusInterfaceName("org.freedesktop.MediaPlayer")
public interface TrackList extends DBusInterface {
int GetCurrentTrack();
}
を:
DBusConnection dc = DBusConnection.getConnection(DBusConnection.SESSION);
TrackList trackList = (TrackList) dc.getRemoteObject("org.mpris.clementine", "/TrackList");
int currentTrack = trackList.GetCurrentTrack();
System.out.println(currentTrack);
しかし、これは二行目のエラーを生成します。 java.lang.ClassCastException: $Proxy6 cannot be cast to my.package.TrackList
。
私は複数の間違いを犯していると確信しています。誰かが私のアプローチにインプットを提供してもらえますか?