Jan 20 2012

Adobe Flash – Important Bug – RSL & FlashVars

Tag: Actionscript,Adobe,Adobe Flash - bug or feature,AllgemeinKonstantin Elstner @ 09:16

Seit Adobe im Jahr 2010 Flash Professional CS5 vorgestellt hat, kommt es immer wieder zu einem aufttretenden Bug.
Die Möglichkeit FlashVars auszulesen existiert schon fast seit der Jahrtausendwende, Adobe scheint es aber zu lieben Entwicklern immer wieder Steine vor die Füße zu werfen, auch bei den FlashVars ist es nicht anders. Normalerweise sollten diese wie folgt auslesbar sein:

loaderInfo.parameters.xmlPath

Diese Codezeile würde die Variable “xmlPath” wenn gesetzt auslesen.

Seit Flash CS5 kann es aber passieren das eben dieser Code “undefined” zurück gibt, obwohl die Variable korrekt von außen gesetzt ist. Ein Umstand, der so gut wie jeden Entwickler in den Wahnsinn treiben kann.

Sollte das auslesen wie oben beschrieben einmal nicht funktionieren sollte man entweder:

parent.loaderInfo.parameters.xmlPath

oder wenn dies auch nicht zum Ziel führt:

parent.parent.loaderInfo.parameters.xmlPath

probieren.

 

Alternativ geht auch der Zugriff über root oder stage:

Global.xmlPath = root.loaderInfo.parameters.xmlPath

oder

Global.xmlPath = stage.loaderInfo.parameters.xmlPath

 

Warum dies notwenig ist?

Adobe hat mit Flash CS5 auch für die IDE das RuntimeSharedLibrary Feature eingeführt (kurz RSL), diese Technik kommt aus dem Flex Bereich und wird ua. für das TextLayoutFramework verwendet. Mit Hilfe von RSL können einzelne Klassen in SWZ Dateien gepackt werden, diese werden gesondert signiert und der User muss nicht zB. bei jedem Flex Anwendungsaufruf das komplette Flex Framwork laden, sondern nur die vom Entwickler integrierten Erweiterungen. Dies spart Traffic und kann auch in eigenen Klassen verwendet werden. Weitere Infos gibt es unter http://help.adobe.com/de_DE/FlashPlatform/reference/actionscript/3/fl/rsl/package-detail.html.

Damit die generierte SWF die bereitstehenden RSL-Dateien vor der eigentlichen Anwendung laden kann integriert Adobe automatisch einen RSL-Preloader. Da man bei Adobe stellenweise wohl nicht so viel Wert auf QM legt hat sich in diesem Preloader ein Bug eingeschlichen, der eben die Übergabe, bzw. die Weiterleitung der FlashVars verhindert, daher der Workaround via parent.loaderInfo.

Adobe ist über den Bug informiert, hat diesen aber auch in die Version CS5.5 übernommen, bleibt zu hoffen er wird in CS6 endlich gefixt, denn selbst ein unabsichtliches anlegen eines TLF basierenden Textfeldes in der IDE ruft die fehlerhafte RSL-Preloader-Mechanik auf die Tagesordnung.

http://forums.adobe.com/thread/644057


Jul 26 2011

Adobe Flash – bug or feature – No multitouch gestures on android

Tag: Actionscript,Adobe,Adobe Flash - bug or feature,AllgemeinKonstantin Elstner @ 00:09

After I wrote in one of my last posts about the missing stageVideo on Android devices. Today I want to write about another missing feature.

A very nice “gimmick” of android is the multitouch feature, swipe to left or right to go to another “site”, swipe down to scroll and so on. Adobe write in there actionscript 3.0 api documents, that this feature would be available to all multitouch devices with one exception, the mac os trackpad is not supported:

Note: The Multitouch feature is not supported for SWF files embedded in HTML running on Mac OS.

(source: http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/ui/Multitouch.html)

 

These days we were working on a flash magazine, which we also optimized  for use with tablets. Our client, for whom we has produced successfully an Android AIR magazine demo, asked us if we could integrate swipe gestures for left and right to switch the sites. I said to him, maybe it is possible, I would check it out and call him back. So I adapted our magazine to test the support of multitouch.

The first thing we struggled over is the fact, that Adobe may thought, when developing Flash CS5.5, that there would be no differences between the Flash Player 10.0 and Flash Player 10.1. Very interesting I think ;)

If you are going to try code like this in Flash Player 10.0:

1
2
3
import flash.ui.Multitouch;
[...]
Multitouch.inputMode = MultitouchInputMode.GESTURE
import flash.ui.Multitouch;
[...]
Multitouch.inputMode = MultitouchInputMode.GESTURE

Flash will publish your swf without any problems. But if a user with a flash player > 9.x and < 10.1, the flash player will hang without any visible error to the user.

With hang I mean, totally hang, after excuting this lines of code the complete SWF file will stop working. If you try this code with a 10.0 debugger player you get a General Error, and afterwards the code excution stops. So be sure, that this SWF will be only delivered for users with flash palyer 10.1 or greater.

This problem occurs for all multiouch related events and gestures!

A workarround is very simple implemented … simply check with an if-condition which version of the flash player the user has:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// this function will return true if the flash player version is 10.1 or greater
function get multitouchSupported():Boolean {
var vAr:Array = Capabilities.version.split(",");
 
if( Number( vAr[0].split(" ")[1] ) < 10 ) {
return false;
} else if( Number( vAr[0].split(" ")[1] ) > 10 ) {
return true;
}
 
if( Number( vAr[1] ) > 0 ) {
return true;
}
 
return false;
}
// this function will return true if the flash player version is 10.1 or greater
function get multitouchSupported():Boolean {
var vAr:Array = Capabilities.version.split(",");

if( Number( vAr[0].split(" ")[1] ) < 10 ) {
return false;
} else if( Number( vAr[0].split(" ")[1] ) > 10 ) {
return true;
}

if( Number( vAr[1] ) > 0 ) {
return true;
}

return false;
}

or check which CPU the device has:

1
2
3
if( Capabilities.cpuArchitecture == "arm" ) {
// code to excute
}
if( Capabilities.cpuArchitecture == "arm" ) {
// code to excute
}

 

The second thing I deiscovered for my self, is that it seems, like it is impossible to use multitouch events like the TransformGesture or the general MultiTouch-Actions if your app is running in a browser on an Android device. On my test devices, a Samsung Galxy I9000 (Android 2.3.3) and a Samsung Galaxy Tab 10.1v, there was no multitouch support in the browser. I tested the support with this simple lines of code:

1
2
3
4
5
if( Multitouch.supportedGestures == null || Multitouch.supportedGestures.length == 0 ) {
trace( "no multitouch support");
} else {
trace( "multitouch available");
}
if( Multitouch.supportedGestures == null || Multitouch.supportedGestures.length == 0 ) {
trace( "no multitouch support");
} else {
trace( "multitouch available");
}

The same code traces “multitouch available” if the code is running as a AIR app on this devices.

I hope, that this will be changed in a feature release of the flash player.

 

In short:

- Take care, that code like the following is only excuted in a flash payler greater or equal to 10.1, otherwise the SWF will stop working

1
2
3
import flash.ui.Multitouch;
[...]
Multitouch.inputMode = MultitouchInputMode.GESTURE
import flash.ui.Multitouch;
[...]
Multitouch.inputMode = MultitouchInputMode.GESTURE

- On Android devices there is at this time no multitouch support available in the browser


Aug 29 2010

Twitter Updates for 2010-08-29

Tag: AllgemeinKonstantin Elstner @ 22:00
  • Yeaha, gerade mein erstes android helloworld Programm geschrieben :-) #

Powered by Twitter Tools


Aug 17 2010

Twitter Updates for 2010-08-19

Tag: AllgemeinKonstantin Elstner @ 22:00

Powered by Twitter Tools


Aug 17 2010

Twitter Updates for 2010-08-19

Tag: AllgemeinKonstantin Elstner @ 22:00

Powered by Twitter Tools


Aug 16 2010

Twitter Updates for 2010-08-16

Tag: AllgemeinKonstantin Elstner @ 22:00
  • Fotografieren aus Reisebussen bald verboten? Relationen – Die Kameraposition bei Street View http://is.gd/ejMxn (via @svle) #

Powered by Twitter Tools


Aug 13 2010

Twitter Updates for 2010-08-13

Tag: AllgemeinKonstantin Elstner @ 22:00

Powered by Twitter Tools


Aug 12 2010

Twitter Updates for 2010-08-12

Tag: AllgemeinKonstantin Elstner @ 22:00

Powered by Twitter Tools


Aug 11 2010

Twitter Updates for 2010-08-11

Tag: AllgemeinKonstantin Elstner @ 22:00

Powered by Twitter Tools


Aug 11 2010

MMS auf dem Nokia N900 – fmms

Tag: AllgemeinKonstantin Elstner @ 09:25

Offiziell unterstützt das Nokia N900 keine MMS. Jedoch lässt sich mit der Anwendung fMMS dieses Feature nachrüsten.

fMMS steht im “Fremantle Extras-devel-Repository” zur Verfügung, seit der aktuellen Version 1.0.3 ist es nicht mehr notwendig zusätzlich fAPN zu installieren.

Da die Einstellungen etwas verwirrend sind, zumindest kursieren viele Anleitungen, die aber nach meiner Meinung irreführend sind, hier eine kurze Anleitung für O2:

In den Einstellungen “Internetverbindung” wählen und folgende Werte festlegen:

Name des Zugangspunktes: o2 Internet
(bitte prüfen, das hier exakte der Name eurer Internetverbindung eingetragen wird, auch Groß-/Kleinschreibung beachten!)

Benutzername: leer lassen

Passwort: leer lassen

MMSC: http://10.81.0.7:8002

HTTP-Proxy: 195.182.114.52

Portnummer: 8080

Das war es hier auch schon, Einstellungen speichern und zu den “normalen Einstellungen” zurückkehren.
Hier müsst ihr noch den Netzwerkmodus wählen:

Polite: Wechselt nur in die MMS-Verbindung wenn keine Verbindung aktiv ist, ansonsten passiert nichts

Rude: Erzwingt eine Trennung der aktiven Verbindung egal was gerade passiert, wechselt zu MMS APN Verbindung und wechselt anschließend wieder zur alten Verbindung.

Havoc: Nutzt die MMS APN parallel zur bereits geöffneten Verbindung (so wie bei jedem anderen Mobiltelefon auch). Hier können wohl noch ein paar Probleme auftreten.

Ich selber nutze Havoc, dies ist auch die zu empfehlende Einstellung.

Nun Anwendung neu starten.

Am besten noch ein Testmms versenden und nach Möglichkeit eines empfangen.

Sollte beim Empfang eine SMS ankommen, mit Hinweis, dass eine MMS eingegangen sei, so ist die Einstellung noch falsch. Sollte die Anwendung nach dem starten eine hohe durchgängige CPU-Last erzeugen, so ist mit hoher Wahrscheinlichkeit der Zugangspunkt-Name falsch.

Veil Spass mit MMS per fMMS auf dem Nokia N900.

Und ps.:

Mobil Tickets der deutschen Bahn funktionieren jetzt auch Fehler frei.


Nächste Seite »