我用克莱门汀做音乐播放器。
它可以用D总线命令来控制.在命令行中,使用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。
我肯定我犯了不止一个错误。有人能给我的方法提供投入吗?
发布于 2011-12-30 07:35:57
现在无法用Clementine测试它,但是getRemoteObject调用中指定的显式类型的以下方法适用于QuodLibet:
package my.sample;
import org.freedesktop.dbus.DBusInterface;
import org.freedesktop.dbus.DBusInterfaceName;
@DBusInterfaceName("net.sacredchao.QuodLibet")
public interface Quodlibet extends DBusInterface {
void Play();
void Pause();
}调用:
DBusConnection dc = DBusConnection.getConnection(DBusConnection.SESSION);
Quodlibet player = dc.getRemoteObject("net.sacredchao.QuodLibet",
"/net/sacredchao/QuodLibet", Quodlibet.class);
player.Play();
Thread.sleep(3000, 0);
player.Pause();
dc.disconnect();https://stackoverflow.com/questions/8656268
复制相似问题