[ERLEDIGT] Android 7 nougat merkwürdiges Verhalten URL HttpURLConnection %27

Erdal.Cam

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?
 
Hallo Erdal,

ich vermute , dass du eine Konvertierung für ein ByteArray vornehmen musst.
byte[] b1 = xxx.getBytes("ISO-8859-1"); resp "UTF-8"

oder du benutzt einen Encoder
URLEncoder.encode(string, "UTF-8");

oder du machst ein händisches Replace
String newString = string.replace("%27", "'");
 
Zuletzt bearbeitet:
Encoder etc. hab ich schon alles versucht.
String replace etc. bringt nichts, weil die %27 niemals sichtbar ist.
Der String ist bis "if (connection.getResponseCode() >=..." immer Korrekt (Und danach auch)!
Erst mit Wireshark sieht man die %27.
Komisch ist ja, dass nur ' zu %27 geändert wird, aber alle anderen Sonderzeichen wie die Klammern ( ) nicht verändert werden.

Und wie schon gesagt ist es nur unter Android 7! (P8 Lite 2017)
Hab leider kein anderes Gerät mit Android 7 zum testen...

Ich vermute schon einen Fehler in Android 7 selbst oder dem P8 Lite 2017
 
Moin,

habe mir vor Kurzem auch ein neues Gerät mit Nougat geholt und hatte in einer App ein ähnliches Problem, ich versuch gleich mal nachzuschauen.

Vergesst es, kann hier grade nicht nachschauen, USB C der Depp.. grade kein Kabel da.
 
Zuletzt bearbeitet:
Und wie schon gesagt ist es nur unter Android 7! (P8 Lite 2017)
Hab leider kein anderes Gerät mit Android 7 zum testen...

Was sagt denn der Emulator ??

P.S. Kannst uns auch die apk hier reinstellen , dann testen wir es auf unseren Devices
[doublepost=1496215145,1496214987][/doublepost]@lordzwieback

Moritz , kannst du hier bitte weitermachen , habe heute Geschäftstermine ausserhalb ....

(Bin also jetzt hier weg)

Thx
 
  • Danke
Reaktionen: lordzwieback
@swa00 Kann mir das ganze nochmal genau durchlesen, selbst testen kann ich dann leider erst heute Abend.
 
  • Danke
Reaktionen: swa00
Du kannst einfach die App vom Store laden:
Remote for iTunes DJ&UpNxt Try – Android-Apps auf Google Play

Brauchst aber eine iTunes installation zum fernbedienen.
Der Fehler ist sehr leicht reproduzierbar:
Wenn ein Lied läuft auf das "CD" Symbol oben rechts drücken.
Wenn alles korrekt ist sieht man nur die Songs von dem aktuellen Album.
Wenn der Fehler vorliegt dauert es auch viel länger und alle!! Songs werden sichtbar.

Im Emulator ist %27 niemals sichtbar.
 
swa00 schrieb:
oder du machst ein händisches Replace
String newString = string.replace("%27", "'");
Das würde ich an deiner Stelle mal testen.

Und auch das mit dem Encoding würde ich nochmal testen, und zwar bevor du mit dem Link irgendwas anstellst. Lass dir vorm Encoden und danach ein Log anzeigen mit dem Link drin und schau dir an, ob sich was verändert. Schau dir mal den Link an: Unicode Character 'APOSTROPHE' (U+0027)
Da erscheint mir verdächtig oft die 27 beim Encoding Teil. Sorry, falls dir das nicht weiterhilft. Habe gerade auch nicht so arg viel Zeit. Später mehr.
 
Ich meine ich hätte das schon... aber ich kann es ja nochmal testen.
Aber wie ich schon sagte die %27 sind im String niemals sichtbar!
[doublepost=1496220283,1496217426][/doublepost]Ich wollte gerade einen Bugreport an Google senden und habe das Problem von einem Remote Kollegen entdeckt:
Sign in - Google Accounts
(Man braucht einen Google Account um sich das anschauen zu können)

Wie es aussieht wurde das erst in Android 7.1.1 gefixt!
 
Alles klar, dann stelle ich den Thread mal auf *erledigt*. Dann musst du nur noch hoffen, dass Huwaei das Update auf 7.1.1 schon bereitgestellt hat oder es in näherer Zukunft tut. Huawei war vor ca. einem Jahr noch auf dem letzten Platz einer Liste, wo es darum ging, wie schnell diverse Hersteller Android Updates ausliefern. Ich glaube Huawei hatte da ihre User im Durchschnitt 7 Monate warten lassen, aber das kann sich natürlich auch geändert haben. :)

EDIT: Habe mal kurz geschaut, ob ich den Link nochmal finde mit der Liste.. habe hier etwas Ähnliches gefunden:

Katastrophal sieht die Sache bei Huawei aus. Die Chinesen haben seit 2013 34 Smartphones in Deutschland herausgebracht, ein Over-the-Air-Update auf eine neue Android-Version hat in dieser Zeit tatsächlich nur ein einziges davon erhalten: das Ascend P6. Auch Ascend Mate und Ascend G615 wurden auf eine neuere Versionsstufe angehoben, allerdings nur über ein manuelles Update - und auf eine zum Zeitpunkt der Veröffentlichung bereits hoffnungslos veraltete Android-Version.

Quelle: Android-Update-Check: Wie gut sind Samsung, Sony, HTC & Co. bei Android-Updates? | areamobile.de

Wie gesagt, die Quelle ist auch schon etwas älter, kann sich geändert haben.
 

Ähnliche Themen

L
Antworten
15
Aufrufe
906
jogimuc
J
M
Antworten
4
Aufrufe
1.169
swa00
swa00
5
Antworten
0
Aufrufe
1.142
586920
5
Zurück
Oben Unten