Erdal.Cam
Ambitioniertes Mitglied
- 9
Hallo,
ich habe ein seltsames Verhalten mit android-7.0-nougat (P8 Lite 2017).
Mit allen früheren Releases gab es kein Problem.
Ich bin der Entwickler (und Besitzer) der App "Remote für iTunes DJ & UpNxt"…
Um iTunes zu kontrollieren, sende ich Nachrichten über "HttpURLConnection".
Ich war verwundert, warum die Kontrolle für einige Funktionalitäten nicht funktioniert. Ich habe mir über Wireshark die Kommunikation angesehen:
Beispiel: (Wie es mit Android funktioniert <7)
Um den Inhalt eines Albums zu öffnen, muss ich folgendes an iTunes senden:
„http://192.168.111.198:3689/databas...ediakind:1','com.apple.itunes.mediakind:32')+ 'daap.songalbumid:11777812807525111312')“
Was Android 7 damit macht:
„http://192.168.111.198:3689/databases/78/...&type=music&sort=album&query=(('com.apple.itunes.mediakind:1','com.apple.itunes.mediakind:32')+ %27daap.songalbumid:11777812807525111312%27)“
Wie ihr sehen könnt, wurde ' in %27 geändert.
Ich hab schon den ganzen Tag nach einer Lösung gesucht… ohne Erfolg
Hier zum Code: (Wichtigsten Teile)
************************************
String temp = String
.format(Locale.US,
"%s/databases/%d/containers/%d/items?session-id=%s&meta=dmap.itemname,dmap.itemid,daap.songvotecount,daap.songyear,daap.songgenre,daap.songartist,daap.songalbum,daap.songtime,daap.songuserrating,daap.songtracknumber,dmap.containeritemid&type=music&sort=album&query=(('com.apple.itunes.mediakind:1','com.apple.itunes.mediakind:32')+'daap.songalbumid:%s')",
session.getRequestBase(), session.databaseId, session.libraryId, session.sessionId, albumid);
byte[] raw = RequestHelper.request(temp, false, 10000);
public static byte[] request(String remoteUrl, boolean keepalive, int timeout) throws Exception {
byte[] buffer = new byte[1024];
URL url = new URL(remoteUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setAllowUserInteraction(false);
connection.setRequestProperty("Viewer-Only-Client", "1");
connection.setRequestProperty("Client-Daap-Version", "3.11");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
if (!keepalive) {
connection.setConnectTimeout(timeout);
connection.setReadTimeout(timeout);
} else {
connection.setReadTimeout(0);
}
connection.connect();
if (connection.getResponseCode() >= HttpURLConnection.HTTP_UNAUTHORIZED)
throw new Exception("HTTP Error Response Code: " + connection.getResponseCode());
************************************
Im Debugger ist "%27" niemals sichtbar.
Nur nach "connection.getResponseCode ()…" sehe ich das mit Wireshark.
Einer eine Idee?
ich habe ein seltsames Verhalten mit android-7.0-nougat (P8 Lite 2017).
Mit allen früheren Releases gab es kein Problem.
Ich bin der Entwickler (und Besitzer) der App "Remote für iTunes DJ & UpNxt"…
Um iTunes zu kontrollieren, sende ich Nachrichten über "HttpURLConnection".
Ich war verwundert, warum die Kontrolle für einige Funktionalitäten nicht funktioniert. Ich habe mir über Wireshark die Kommunikation angesehen:
Beispiel: (Wie es mit Android funktioniert <7)
Um den Inhalt eines Albums zu öffnen, muss ich folgendes an iTunes senden:
„http://192.168.111.198:3689/databas...ediakind:1','com.apple.itunes.mediakind:32')+ 'daap.songalbumid:11777812807525111312')“
Was Android 7 damit macht:
„http://192.168.111.198:3689/databases/78/...&type=music&sort=album&query=(('com.apple.itunes.mediakind:1','com.apple.itunes.mediakind:32')+ %27daap.songalbumid:11777812807525111312%27)“
Wie ihr sehen könnt, wurde ' in %27 geändert.
Ich hab schon den ganzen Tag nach einer Lösung gesucht… ohne Erfolg
Hier zum Code: (Wichtigsten Teile)
************************************
String temp = String
.format(Locale.US,
"%s/databases/%d/containers/%d/items?session-id=%s&meta=dmap.itemname,dmap.itemid,daap.songvotecount,daap.songyear,daap.songgenre,daap.songartist,daap.songalbum,daap.songtime,daap.songuserrating,daap.songtracknumber,dmap.containeritemid&type=music&sort=album&query=(('com.apple.itunes.mediakind:1','com.apple.itunes.mediakind:32')+'daap.songalbumid:%s')",
session.getRequestBase(), session.databaseId, session.libraryId, session.sessionId, albumid);
byte[] raw = RequestHelper.request(temp, false, 10000);
public static byte[] request(String remoteUrl, boolean keepalive, int timeout) throws Exception {
byte[] buffer = new byte[1024];
URL url = new URL(remoteUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setAllowUserInteraction(false);
connection.setRequestProperty("Viewer-Only-Client", "1");
connection.setRequestProperty("Client-Daap-Version", "3.11");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
if (!keepalive) {
connection.setConnectTimeout(timeout);
connection.setReadTimeout(timeout);
} else {
connection.setReadTimeout(0);
}
connection.connect();
if (connection.getResponseCode() >= HttpURLConnection.HTTP_UNAUTHORIZED)
throw new Exception("HTTP Error Response Code: " + connection.getResponseCode());
************************************
Im Debugger ist "%27" niemals sichtbar.
Nur nach "connection.getResponseCode ()…" sehe ich das mit Wireshark.
Einer eine Idee?