Category Archives: Android

New Releases of MyBus Luleå (1.0.3) and MyBus Dalarna (1.0.2)

Just released version 1.0.2 of MyBus Dalarna and 1.0.3 of MyBus Luleå with the same changes: “Low-res support added. Better handling if stop page is not available.”.

Both applications should now work on low-res devices like e.g. HTC Tattoo but unfortunately I do not have access to such devices and have only tested it in the emulator (where it works of course ;)).

Also the bus stop page for Luleå has been rather flaky and broke the application when a textual error message was returned on the web page, and thus I added a fix for handling that.

New Android App: Temp in Abisko

As I am heading up to the Abisko Mountain Station next week (again), I thought I’d release a temperature app for Abisko!

Temp in Abisko shows the current temperature for the Abisko Mountain Station and the temperature is updated every 5 minutes. The temperature can be displayed as an application with a graph or as a home screens widget.

TempInAbisko1.png

TempInAbisko2.png

Have fun and please let me know if you try it out!

MyBus Luleå and Dalarna – new releases

Did some refactoring to make the code more generic as MyBus Luleå and MyBus Dalarna has a lot in common (was mostly copy paste before). Not fully done but have come a good way to making it fully generic. I have learned a lot about Android programming doing this!

In Dalarna they have a lot of bus stops which made the application slow to start and thus I added a bus stop cache in two levels.

  1. Save the list with all downloaded bus stops to disk and load it on start. Update the list if the bus stop information has changed online.
  2. Pre-populate the cache with a static version of the bus stop list for faster cold-start of the whole application.  

Also added the faster scrolling code in the bus stops selection UI to MyBus Luleå. It was already in the previous version of MyBus Dalarna.

Have fun and please leave a comment and grade it in Market if you use the application. Thanks!

MyBus Dalarna

I just released another Android application, MyBus Dalarna that provides live bus information for busses in Dalarna, Sweden. You can select bus stops and bus lines you are interested in and the application will update the current bus time info automatically.

screenshot1.png screenshot2.png

It is free (ads supported) and is available on the Android Market now.

Changelog:
2010-05-18: 1.0.2 Support for lower resolution devices. Better handling if bus stop page is not available or broken.
2010-03-21: 1.0.1 Added bus stop caching for quicker startup.
2010-03-20: 1.0.0 Initial Release.

MyBus Luleå – Ny Android applikation

UPDATE: Nu har jag släppt en 1.0.1 som ska funka på 1.5 devicer också…. Se långt ned på detta inlägg för mer info.

Jag har precis släppt en ny Android-applikation på Android Market, MyBus Luleå. Den visar aktuell businformation för bussar i Luleå och användaren kan välja hållplatser och linjer som hon är intresserad av. Målgruppen är bussresenärer som åker buss ofta. Informationen uppdateras var 30e sekund.

OBS Luleå Lokaltrafik AB, LLT har inget att göra med utvecklingen av denna applikation.

Jag experimenterar även med att använda annonser i denna applikation. Främst för att lära mig mer om detta område.

Här är ett exempel på hur det kan se ut:

MyBusLulea100_snapshot2.png
och här är en QR-kod för att installera applikationen:
chart?cht=qr&chs=120x120&chl=market%3A%2F%2Fsearch%3Fq%3Dpname%3Acom.parnes.mybuslulea
Gällande 1.0.1: Tydligen så gillade inte Microsofts server som LLT kör att man inte skickade med Accept i HTTP-headern och gav då server-fel. Nu talar vi glatt om för den att vi accepterar allt och då levererar det glatt tillbaka businfo! Tydligen så var denna bug fixad i nyare Android-versioner.
Changelog: 2010-05-18: 1.0.3 Support for lower resolution devices. Better handling if bus stop page is not available or broken.2010-03-31: 1.0.2 Added bus stop caching and easier selection of bus stops.2010-02-14: 1.0.1 Now works on Android 1.5.2010-02-14: 1.0.0 Initial Release.

Nytt firmware till Nexus One

Inatt kom den omtalade uppdateringen till Nexus One med bland annat Multi-Touch i webbläsaren, maps och bildgalleriet. Den ska komma över luften till alla Nexusar inom de kommande dagarna men kan du inte vänta (som jag) så kan du installera den enkelt själv genom följande:

  1. Ladder ner uppdateringen och spara den som update.zip i rooten på minneskortet.
  2. Stäng av telefonen (Power off).
  3. Slå på telefonen och håll power-knappen och audio-down intryckt.
  4. Välj RECOVERY med hjälp av audio-down och power-knappen.
  5. När Androiden och en triangel dyker upp så tryck Power och audio-up.
  6. Välj “apply sdcard:update.zip” med scrollbollen.
  7. Boota om när den säger att den är färdig. (Tar ca 2-3 minuter).

Voilá!

Google Nexus One

Idag fick jag min nya telefon, Google Nexus One:

  download-01-nexus-one-540x442.jpg

Det spontana intrycket är “wow, vilken cool telefon och pryl”. Av någon anledning så ser den inte riktigt lika snygg ut på bilder som i verkligheten. Jag gillade den skarpt även om många andra där ute tycker att iPhone 3G är snyggare (jag tycker för övrigt att iPhone 2G är snyggare än 3Gn ;)).

Jämfört med min gamla HTC G1 så är hårdvaran bättre på ett antal punkter:

  1. Mycket bättre kamera. 5mp och bättre lins.
  2. Blixt till kameran.
  3. Snabbare CPU. Märks jättetydligt.
  4. Mer minne. 512MB.
  5. Tunnare, dock har den inget tangentbord vilket jag egentligen tycker är ett stort minus.
  6. Större skärm, 3.7 tum.
  7. Bättre skärm, amoled 800×480

På mjukvarusidan så kommer den med Android 2.1 vilken har ett antal häftiga finesser jämfört med 1.6 som jag kör på min G1a. Det är dock en tidsfråga innan G1an kommer “i kapp”. Generellt kan man säga att 2.1 känns mycket mognare som telefon OS än 1.x.

Hur köper man då en Nexus One lagligt till Sverige? Det finns flera olika vägar att gå och speciellt om man vill betala hutlösa extra avgifter till olika skumma aktörer. Ebay är ett sätt. Ett annat är att beställa via International Orders. Ett tredje sätt är att beställa den direkt från Google och använda ett företag som skickar vidare paketet till Sverige. Jag använde det senare med följande steg:

  1. Öppna en “privat” adress hos Borderlinx.com. Detta är gratis och du får en privat DHL-postlåda hos dem och när det kommer paket till den adressen så kommer det upp på ditt konto och du kan betala via Paypal eller kreditkort.  
  2. Beställ sedan telefoner direkt hos Google och betala via Google Checkout. Nu är dock Google lite luriga och säljer bara telefonen om din dator är i ett land dit de säljer telefonen (ej Sverige ;)). Lösningen är att gå via en proxy och jag använde mig av TOR-nätverket där jag tvingade fram att jag skulle komma ut i just USA. Det finns andra proxy lösningar också. Vill ni veta mer om just detta så säg till! Man behöver bara göra själva beställningen via proxy och så du behöver inte ange någon kreditkortsinformation via någon proxy. Är du riktigt paranoid så kan du sätta ett temporärt lösenord på ditt Google konto och byta tillbaka direkt efter du beställt.
  3. Betala din telefon via Google Checkout.
  4. Vänta 24h tills den dyker upp hos Borderlinx och betala där frakten till Sverige ($35-45) plus svensk tull och moms.
  5. I och med att Borderlinx förbetalar skatt och tull till DHL så passerar paketet Arlanda mycket snabbt innan paketet skickas vidare inom Sverige (vilket tog ca 4h från att den släpptes från DHL utrikes på Arlanda).  

Orderkostnad:
Google $564,71 = 4 070,13 SEK
Borderlinx $198.67 = 1431.01 SEK
Totalt $763.38 = 5501.14 SEK

Till detta så måste du köpa en US-kontakt adapter för 220v eller en ny laddar för 100-200 SEK.

Hur är det då med garanti? Här är HTC väldigt trevliga och de ger 24 månaders garanti även om den är köpt i USA men den måste skickas till UK för reparation och inte till deras svenska reparationscenter.

För att summera, den är en cool telefon och telefonen rekommenderas varmt!

Temp in Luleå 1.0.8 – Android-utveckling

Igår släppte jag en ny version (1.0.8) av min Android-applikation, Temp in Luleå och nytt är att den går att får som ‘widget’. Applikationen visar bara temperaturen i Luleå och läsare där ute kan kanske tycker det är meningslöst att utveckla en applikation som bara visar temperatur i för ett enda ställe men jag gör det för att stilla mitt intresse i Android-programmering.

TempInLulea108_1.png TempInLulea108_2.png  

Första bilden är av själva applikationen och den andra visar den som en widget.

Arkitektur: Applikationen är uppdelad i fyra bitar:

  1. Widget: som visar widget-gränssnittet på “hem-skärmen”.
  2. Application: som visar en fullskärm med mer info om applikationen och där man kan kontrollera den lite.
  3. Service: en process som kör i bakgrunden och hämtar temperaturen från källan (Marge) och sedan anropar applikationen och widgeten med ett event att det finns nytt temperatur data. Notifieringarna sker via ett callback-interface där varje modul som vill känna till ändringarna registrerar sig för att bli uppdaterad med ett event.
  4. Notification: Från applikationen kan man välja att även visa nuvarande temperatur som en notifiering. Detta är ett arv från Android innan version 1.5 då det inte fanns widgets.

Det är en enkel applikation men jag har försökt programmera den som om den vore ett mycket större system. Här kommer lite blandade tips och tricks på hur man löser mer eller mindre förekommande problem.

Hur hantera ändring av skärm orientering? När man ändrar orientering på sin Android, dvs vrider på den så man ändrar mellan ‘Landscape’ och ‘Portrait’ så uppkommer problemet att ens applikation och widget har olika mycket utrymme att rita sitt gränssnitt på. Här kan man lyssna på events för att bli notifierad om ändringarna men Android har gjort det enklare än så. Man skapar helt enkelt ett bibliotek som heter ‘layout-land’ parallellt med med ‘layout’ och där lägger man en xml-fil med UI-layout som heter likadant som den för portrait-layouten. Har man denna fil där så kommer android-system att automatiskt välja rätt layout för de olika tillstånden. Applikationen och widgeten anropas inte ens med en notifiering att en ändring har skett. Dock måste man vara noga med att kalla elementen likadant i de båda layouterna. Tips: om du vill ändra layout i emulatorn så tryck Ctrl-F12 för att växla till nästa layout. Mer info om kontroll av emulatorn.

Hur hantera automatisk start av service/applikation vid boot? Det finns inget automatiskt sätt (liknande andra UNIX-baserade system) att registrera sitt program att det ska anropas automatiskt då systemet bootat upp. Här måste man registrera sig som lyssnare på android.intent.action.BOOT_COMPLETED i AndroidManifest.xml och då anropas den klass man angett och man kan göra det man vill vid start, t.ex. starta en service. Så här ser det i manifest-filen:

<receiver android:name=“BootReceiver”>

<intent-filter>

<action android:name=“android.intent.action.BOOT_COMPLETED”>

</action>

</intent-filter>

</receiver>

Hur får man en ram på sin widget utan att leka med Photoshop? Ladda ner en standard widget-ram från widget UI design sidan (bild-filen, inte Photoshop-filen) och lägg den som bakgrund i ditt UI via att sätta android:background=“@drawable/frame” i layout-filen. Om du sedan har en LinearLayout som layout så måste du sätta ett offset i y-led överst för att komma inom ramen. Det gör du så här: android:layout_marginTop=“5sp”

Finns massor mer att blogga här om gällande denna lilla applikation men det sparar vi till en annan dag!