Tuesday 5 March 2013

Mobile Development with C#

Mobile Development using C#
Building mobile applications can be as easy as opening up your IDE, throwing something together, doing bit of testing, etc. Many people think that the indigenous languages Objectiv-C, Java, respectively, are the only choice.
However, number of platforms for building mobile apps has emerged. e.g.: PhoneGap, Appcelerator, Xamarin, etc.

Xamarin is the one that I have experienced in one of my experiment.If you are famliar with C#, then this is the right tool for you. Basically, it allowed you to build with single language - C#, class libary and runtime that work across all 3 mobiel platforms (iOS, Android and Windows). Besides, you can either develop your application via Monodev IDE or Visual Studio. So flexible.

Debugging
My experience with Xamarin is only limited to Android platform only (this is the only one can be excuted in windows, unless you have Mac).
It was fine and easy to do a debugging in the given emulator. But, I am sure you will come to a stage where you would prefer to debug it or test your application in a real device.
In Xamarin, debugging can be done over USB Connection. But, this can be achieved on paid/licensed version only. So, please do not waste your time to figure out how to do it with a trail version.

I have a HTC wildfire mobile with Android. I tried the debugging process mentioned in Xamarin website. In order to debug in real device, you need to connect your mobile with the given USB cable to your PC. And, of course you will be asked to provide a proper usb driver installed in your computer before anything.

There are number of drivers available from google, named as google usb driver, but it is only available for certain devices. Not HTC wildfire :(
http://developer.android.com/sdk/win-usb.html#WinUsbDriver

According to the developer guide for android (the above link), you may seek for the right driver via the OEM USB drivers. However, if you are using HTC mobile for development. Please finger cross. Because I personally found HTC didn't provide this kind of USB driver at all.

So, how to proceed?
Cheat sheet of installing HTC Wildfire Android SDK Drivers

In order to debug on your HTC smartphone on windows 7, you need to install USB drivers.
1. First, get Android SDK and install the Android SDK.
2. Next, need to hack or modify the driver (file) to add support for your HTC mobile. Look for "android_winusb.inf" in your machine.

Please see the settings below. Warning! it may or may not work for you. Please backup your orignal driver / file before any modification.
Again, it works for me. But, I will not responsible to any changes you have made.

Good luck. And have fun!

JL

----------------------------------------------------------------------------------------------------------------
File name:  android_winusb.inf

;
; Android WinUsb driver installation.
;
[Version]
Signature           = "$Windows NT$"
Class               = AndroidUsbDeviceClass
ClassGuid           = {3F966BD9-FA04-4ec5-991C-D326973B5128}
Provider            = %ProviderName%
DriverVer           = 08/27/2012,7.0.0000.00001
CatalogFile.NTx86   = androidwinusb86.cat
CatalogFile.NTamd64 = androidwinusba64.cat

[ClassInstall32]
Addreg = AndroidWinUsbClassReg

[AndroidWinUsbClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1


[Manufacturer]
%ProviderName% = Google, NTx86, NTamd64


[Google.NTx86]

;Google Nexus One
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E12&MI_01

;Google Nexus S
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E24&MI_01

;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E41
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E42
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E44&MI_01

;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_2C11

;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4EE1
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE2
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4EE3
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE4&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4EE5
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE6&MI_01

;HTC Incredible
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C9E
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C9E&MI_01

; HTC Wildfire
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C8B
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C8B&MI_01

;T-Mobile G2
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C91
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C91&MI_01


[Google.NTamd64]

;Google Nexus One
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E12&MI_01

;Google Nexus S
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E24&MI_01

;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E41
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E42
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E44&MI_01

;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_2C11

;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4EE1
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE2
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4EE3
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE4&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4EE5
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4EE6&MI_01

;HTC Incredible
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C9E
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C9E&MI_01

;HTC Wildfire
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C8B
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C8B&MI_01

;T-Mobile G2
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C91
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C91&MI_01

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include     = winusb.inf
AddService  = WinUSB,0x00000002,WinUSB_ServiceInstall

[WinUSB_ServiceInstall]
DisplayName     = %WinUSB_SvcDesc%
ServiceType     = 1
StartType       = 3
ErrorControl    = 1
ServiceBinary   = %12%\WinUSB.sys

[USB_Install.Wdf]
KmdfService = WINUSB, WinUSB_Install

[WinUSB_Install]
KmdfLibraryVersion  = 1.9

[USB_Install.HW]
AddReg  = Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}"

[USB_Install.CoInstallers]
AddReg    = CoInstallers_AddReg
CopyFiles = CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"

[CoInstallers_CopyFiles]
WinUSBCoInstaller2.dll
WdfCoInstaller01009.dll

[DestinationDirs]
CoInstallers_CopyFiles=11

[SourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64

[SourceDisksFiles.x86]
WinUSBCoInstaller2.dll  = 1
WdfCoInstaller01009.dll = 1

[SourceDisksFiles.amd64]
WinUSBCoInstaller2.dll  = 2
WdfCoInstaller01009.dll = 2

[Strings]
ProviderName                = "Google, Inc."
SingleAdbInterface          = "Android ADB Interface"
CompositeAdbInterface       = "Android Composite ADB Interface"
SingleBootLoaderInterface   = "Android Bootloader Interface"
WinUSB_SvcDesc              = "Android USB Driver"
DISK_NAME                   = "Android WinUsb installation disk"
ClassName                   = "Android Device"



Google Maps Javascript API

According to Google website
(http://code.google.com/apis/maps/documentation/javascript/),
the JavaScript Maps API v3 is a free service, available for any web site that
is free to consumers. If you have any concern, read the above sentence again….  Or check the terms, clause 9.1 if not
clear.

So, what it is? Interactive map with more controls on the map and particularly about the
flexibilities on what you can do and you want do with the map? Yup, this is pretty much what the API allow you to do with. 
However, it is not really straightforward. But it is straightforward only if you are familiar with JavaScript, as well as
the meaning of callback or asynchronous. No worry, it is not the end of the world.

It is pretty helpful to start with the basic samples under
the developer’s guide. Of course, if you prefer to do something quick, just need a
map and some markers on the map to pin-point your location or some of your favourite
locations, then I would suggest you jump into ‘Using Closures in Event
Listeners’ – Event topic,  and ‘Geocoding’.

The 1st one covered the codes on how to create
location, and more importantly the Markers. And, the second topic will be all
about ‘the convertor’ convert location name into geographic coordinates. You
need something like latitude and longitude for the position on the map. A
marker needs it. (just refer to the sample code about how to geocode an address
(either from user input or from db) and place a marker at the returned latitude
and longitude values. http://code.google.com/apis/maps/documentation/javascript/services.html#Geocoding)

Yup, before I close the topic, one thing I need to emphasis
here is the :

<!DOCTYPE html> tag.
Makesure you change your default doc type to this one. Else, you  can’t see the map.

JL

Google MAP API

I was looking for google map solution It has been available to public for ages
already. But, I believed you wouldn’t dive in until you really want to use
it. So, I started with Google static map first. The static map looks good and
easy to configure and use. As long as you know what parameters mean, then you
can produce a static map that meet your requirement. But the only drawback was
no navigator control on the map. Meaning that, you cannot zoom in and out or
place an orange human for street view, etc. Correct me if I am wrong.

As mentioned, this is a static map. So, it is just a graphic.
When you right click it, you can save the whole image as a picture or image.

To me, the easiest way to cope up and understand the effect
of each parameter is to get your hands dirty. I tried copying one of the examples
(URL) from the maps.googleapis.com. And, I’ve made some changes to the query
string with the given parameters.

Example:
http://maps.googleapis.com/maps/api/staticmap?size=512×512&maptype=roadmap\&markers=size:mid|color:red|Singapore,Singapore|London,UK|Kajang,Malaysia|Canada&sensor=true

Discover what you can do with Google Maps APIs here:
https://developers.google.com/maps/


As a result after a quick
investigation on Google static map, I think I need something more dynamic. So,
I decided to explore the more advance map api which is the Google’s Javascript
Maps V3.

How to run unit test for your Xamarin Application in AppCenter?

How to run unit test for your Xamarin application in AppCenter?  When we talk about Building and Distributing your Xamarin app, you m...