piątek, marca 25, 2011

Python for Android vs. AppInventor - 2:0 ;-)

Pisanie w Java'ie dla Androida jest fajne i w ogóle super, ale jest też upierdliwe.
Trzeba się paprać w jakimś XMLu, dotykać kilku plików, pisać głupie onCreate i podobne.

Do czegoś większego to ma sens, ale jak chcę napisać program, który będzie wykonywał zdjęcia co 30 sekund to przecież nie powinienem być zmuszony do robienia tego wszystkiego co opisałem wyżej....

Najpierw liczyłem, że AppInventor for Android będzie takim fajnym narzędziem, które pozwoli mi takie rzeczy robić szybko i miło......
Zawiodłem się. Do teraz np. nie wychodzi mi robienie zdjęć przy pomocy AppInventora. Dodatkowo programy w nim napisane, czy narysowane mają po 2-4 MB... zgroza.

Dlatego mimo niechęci do używania Java'y do takich prostych rzeczy musiałem jej używać ;-)

Ale później zainstalowałem ponownie na telefonie Scripting Layer for Android (SL4A) i dodałem do SL4A Pythona :-)

I tak znalazłem rozwiązanie moich problemów :-)

Program robiący zdjęcia co 30 sekund wygląda tak:
import android
import time

def lz(s):
while len(s)<5: s='0'+s
return s

droid = android.Android()

i=0
while (True):
droid.cameraCapturePicture('/sdcard/timePhoto/'+lz(str(i))+'.jpg',True)
i=i+1
print(lz(str(i)))
time.sleep(30)


A i tak zapewne działanie funkcji lz() można by czymś zastąpić ;-)

Jak widać program działa w nieskończonej pętli, w której co 30 sekund wykonuje się 1 zdjęcie zapisywane na karcie SD.

Narzędzie sprawdza się całkiem dobrze, szczególnie jeśli przełączy się telefon w tryb w którym nie wygasza ekranu.

Po tym poszedłem za ciosem ;-)

Ponieważ mam teraz od Ery 5GB transferu na telefonie to czasem używam telefonu do tetheringu. Ale żeby go włączyć w Nexus S to trzeba się trochę naklikać... Niby nic, a męczy.

Ale teraz mam łatwiej ;-) Klikam na ikonkę tego skryptu:
import android

droid = android.Android()
droid.startActivity("android.settings.WIRELESS_SETTINGS")
print("done")

który otwiera po prostu aktywność związaną z ustawieniami bezprzewodowymi, a stąd jeden klik prowadzi mnie do ekranu konfiguracji tetheringu :-)

W SL4A można używać także JavaScript osadzonego w HTMLu, ale wtedy nie działa tak jako powinno umieszczanie linków do takich skryptów na pulpicie.


Podobne postybeta
Python z urllib = najlepszy menadżer pobierania ;-)
Komórka - w końcu to taki mały komputerek ;-)
AppInventor - pierwsze wrażenia i pierwsze programy :-)
OAuth mnie denerwuje ;-)
wait() i notify()/notifyAll() - najbardziej nierozumiane metody klasy Object ;-)