# Friday, December 11, 2009

Using Bluetooth Headsets with Mobile In The Hand 4.0

A commonly requested feature is the ability to switch audio to play through a Bluetooth headset device. Mobile In The Hand 4.0 brings this functionality to .NET Compact Framework developers allowing you to play any device audio through a paired headset device. It also includes classes to playback sounds too.

The AudioGateway sample application which ships with the library contains the functionality to playback a sound file and toggle between the device speaker and a headset. The code to perform the switch is incredibly simple:-

private   BluetoothAudioGateway bag = new BluetoothAudioGateway();

The BluetoothAudioGateway exists in the InTheHand.WindowsMobile.Media namespace. A CheckBox control toggles the output using the following code:-

private   void chkGateway_CheckStateChanged(object sender, EventArgs e)

{

 

   if (chkGateway.Checked)

   {

      bag.OpenAudio();

   }

 

   else

   {

      bag.CloseAudio();

   }

}

OpenAudio opens the connection to the headset and sends audio output to it. CloseAudio closes the connection and returns output to the built in speaker. The SoundPlayer class is used to play back a sound file:-

InTheHand.Media. SoundPlayer sp = new InTheHand.Media.SoundPlayer(txtFilename.Text);

sp.Play();

A full online library of class documentation for all this and more is available. For more information about Mobile In The Hand see the product page.

#    |
# Wednesday, December 09, 2009

Windows Mobile Provisioning using Mobile In The Hand 4.0

In the last post we saw the new My Extensions template which adds access to new Visual Basic features. In this post we will look at another new item introduced with Mobile In The Hand 4.0 - Provisioning XML. Visual Studio has a rich XML Editor built in, Windows Mobile uses provisioning XML documents for everything from adding a browser favourite through to configuring a new GPRS network. The new template allows you to quickly create an empty Provisioning XML document and includes the schema to ensure your document is valid. Let Visual Studio's Intellisense help you quickly build a provisioning document.

As with the Visual Basic example you start with an existing device project, in this case it can be either C# or Visual Basic. Select Add New Item and choose Provisioning XML from the list:-

In this example I have called the file AddFavourite.xml (no prizes for guessing what task we will be performing). The document is created with a skeleton provisioning document. Notice the namespace is provided which links to the schema we installed for you.

You can now add the required code between the wap-provisioningdoc tags. As you start to type the IntelliSense will suggest valid elements for you based on the schema:-

 

This makes it very easy to quickly build up a complete document:-

You can process a configuration document like this using the ConfigurationManager class. By setting the document as an embedded resource you can use the following code to load it and pass it to the ConfigurationManager:-

 

Dim xd As New System.Xml.XmlDocument

xd.Load(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("VisualBasicDeviceProject.AddFavourite.xml"))

InTheHand.WindowsMobile.Configuration.ConfigurationManager.ProcessConfiguration(xd, False)

After running this code you can check your Internet Explorer Mobile favourites:-

For more information about the library see the product page.

#    |
# Monday, December 07, 2009

New "My" Functionality in Mobile In The Hand 4.0

This blog post will walk through the process of adding the additional "My" functionality added in InTheHand.VisualBasic. To start off, open Visual Studio 2008 and create a new Visual Basic device project (or open an existing one). At this point you'll end up with a solution window which looks a bit like this. Note the inspired project name in this example:-

 

The next step is to right-click the project and select Add > New Item... from the menu:-

This will bring up the Add New Item window from which you should see MyExtensions among the list. Select this (you can change the default name if required) and click Add.

The new code file is added to the project. You don't need to edit this and you won't be interacting with it directly from your code. Your solution window will now look like this:-

 

You can now get on with building your application. Any time you start to type My you'll see a much longer list of options:-

Application, Computer and User are new items added by this library and provide additional functionality, all remaining a direct subset of the desktop experience. For example I added a button and in the Click handler added this simple code snippet:-

MessageBox.Show(

My.Application.Info.ProductName)

On running the code the Product Name is retrieved from the assembly information:-

 

In a future post I'll run through the various items available through the "My" syntax. For more information about the library see the product page.

#    |

Mobile In The Hand 4.0 Released

Today we put the final touches to Mobile In The Hand 4.0 and have released this latest version of the suite. This is a major reworking of the code and the library is now broken into 10 separate dlls so you only need to deploy the specific functionality you require in a project. We have also added some additional functionality alongside the code libraries themselves to add "My" keyword functionality for Visual Basic users and make it easier to incorporate and edit provisioning XML documents. Over the next few weeks I'll be posting a number of blog articles to highlight new features and elaborate on some of the less visible features.

Full details of the library are available on the product page.

#    |
# Tuesday, September 08, 2009

Domain Name Woes

Normally when I renew a domain it goes through smoothly in plenty of time and nothing "exciting" happens. For some reason the provider decided to do something to the domain at the same time as it was being automatically renewed which has lead inthehand.com to go into some form of limbo for the best part of a week. I have been assured that it will be restored within 48 hours. It has been very frustrating - if it had been a server issue it would have been easy to tweak the DNS to at least point to some kind of holding page which would have restored some form of service after a few hours. As the issue was with the domain name and I had no way to fix the name server records there was nothing I could do to restore any kind of functionality. For the time being you can still access the website using one of the alternative domains - www.inthehand.co.uk or www.inthehand.net. Sorry to anyone who has tried accessing the website or email during this period. If you have emailed me and not received a response please resend and replace .com with either .co.uk or .net and it'll get through.

#    |
# Thursday, August 20, 2009

Widgets and Samsung

There has been a lot of buzz recently around Widgets because of the support in the upcoming Windows Mobile 6.5 release. However don't forget that Widgets are based on web standards and therefore can run on a wide variety of platforms. For example Samsung has just released a Widget SDK for their phone handsets:-

http://innovator.samsungmobile.com/platform.main.do?platformId=12

This covers a couple of Windows Mobile devices as well as those running on other platforms. Their SDK ties into the Eclipse developer tools which is probably not something which will be familiar to those who concentrate on Windows Mobile development. As we know though you can create Widgets with notepad if needs must.

Because Widgets are standards based that doesn't mean that you can easily write a single Widget and then run it on a variety of platforms. While Samsung have provided a consistent model for their different phones there are still cases where you would want to customise the widget for different device types. Likewise between different SDKs there are some device specific objects which are not present across all platforms - for example on Windows Mobile a number of SystemState properties are exposed. So while you may be able to share part of your code between different platforms you are going to need to make changes and test accordingly to support a wide range of devices.

#    |
# Sunday, August 09, 2009

Phone Recording in Windows Mobile

There has been some buzz recently about further changes to the Windows Mobile 6.5 user experience since it was announced and the developer emulators released. For example this article has some screenshots:-

http://forum.xda-developers.com/showthread.php?t=544445

It shows changes to the soft-key menus at the bottom of the screen and a complete revamp of the tab control. Further on in this article there is a description of some registry keys which can be used to enable recording of voice calls which enables a new menu item inside the phone application. As it turns out these registry keys work on Windows Mobile 6.1 also as I was able to test on an HTC Touch Diamond 2. For reference the registry settings are:-

[HKEY_LOCAL_MACHINE\System\AudioRecording]
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Microsoft\Voice]
"EnableCallRecordMenuItem"=dword:00000001
"AllowInCallRecording"=dword:00000001

Soft reset the device after setting these and you should notice a new Record menu item when in a phone call. You can listen to the recordings using the Notes application, they are given a unique filename with the timestamp of the call.

#    |
# Wednesday, August 05, 2009

Samsung Release Windows Mobile SDK 1.2

This latest release adds new APIs for FM Radio and devices with front and back cameras. The radio control allows you to turn on/off the radio, go to a specific frequency, seek up or down and read RDS data. You'll need to uninstall the previous version if you have it before installing this package. So if you develop for Samsung devices what are you waiting for - grab the download here:-

http://innovator.samsungmobile.com/down/cnts/toolSDK.detail.view.do?platformId=2&cntsId=4604

#    |
# Wednesday, July 29, 2009

Roamin' Umpire

When a mobile system requires a data connection in the field you accept incurring a certain cost to establish a GPRS connection. You may be lucky enough to have an unlimited plan or you may be billed based on the volume of data you use. Either way reducing the amount of data you send and receive is valuable as it will reduce the time taken to synchronise data improving the user experience and reducing load on your servers.

However have you considered what happens when you take the device out of your home network? Roaming data charges can vary from high to extortionate and you probably won't have the luxury of a flat usage plan. In fact in a lot of cases you might want to restrict the application when used outside of the normal operating network - either to stop all data communications or to limit them to a minimum and perhaps only synchronise when the user manually initiates it rather than on a regular schedule. If you look at a couple of synchronisation applications - ActiveSync or Live Mesh for example these have a checkbox option to disable a synchronisation schedule when the device is roaming on a foreign network - the user has to actively change this before the device will automatically connect and synchronise data. This can be quite a good model to follow in your own applications. You may alternatively decide to set this behaviour based on a central policy rather than letting the user choose.

In order to react to changes in the network you can use the State and Notifications Broker which exposes a property with the current roaming status - SystemState.PhoneRoaming which is a boolean property. Because you can trap this event you can react as soon as the device registers on a foreign network or when it returns home and customise your code accordingly. Unfortunately not all applications are this considerate - Microsoft's MyPhone client will continue to sync automatically unless you disable scheduled synchronisation while roaming - the opposite behaviour to their other applications. Let's hope this is tweaked in a software update to help avoid nasty surprises!

#    |
# Thursday, April 09, 2009

Emulating Bluetooth

Alex Yakhnin pointed out this interesting article over on CodeProject showing how to use Bluetooth from within the Windows Mobile emulator:-

http://blogs.msdn.com/priozersk/archive/2009/04/09/bluetooth-on-the-emulator.aspx

Unfortunately it does require you to replace the stack on your host machine with FreeBT which is currently in Alpha so have a look through the Troubleshooting section for known issues first. I know lots of people have requested this for when they don't have access to a real device so it may be useful for demonstrating applications or debugging even...

#    |
# Friday, March 13, 2009

.NETCF 3.5 Breaking Changes

I came across this useful list of breaking changes in the .NETCF 3.5 runtime and thought I'd blog it here before I lose the URL:-

http://msdn.microsoft.com/en-us/netframework/bb986636.aspx

#    |
# Tuesday, March 03, 2009

Samsung Release Windows Mobile SDK

Samsung's Mobile Innovator program has released an SDK for Samsung specific APIs on their Windows Mobile devices. Although this is a native code SDK all the functions I looked at were very P/Invoke friendly. For example once you've installed the device-side cab you can query the luminance sensor using:-

 

[

DllImport("SamsungMobileSDK_1.dll")]

 

 

private static extern int SmiLightSensorGetIlluminance(out uint illuminance);

The exact features available vary depending on the device model but the SDK contains functionality for LEDs, Camera Flash, Light Sensor, Scroll Wheel, Accelerometer etc

You can download the SDK, and some Emulator skins for Samsung devices from here:-

http://innovator.samsungmobile.com/down/cnts/category.main.list.do?platformId=2&cateId=147&cateAll=all

#    |
# Thursday, January 08, 2009

Microsoft Tag

Microsoft have released a new beta product for Windows Mobile (and also iPhone) called Microsoft Tag
This allows scanning of 2d barcodes with the device camera which can open specific URLs etc. The client software varies slightly depending on the capabilities of your device, on my Samsung Blackjack it offers realtime scanning - you just have to position the code roughly in a rectangular frame on the screen. On a HTC Touch device it invokes the camera capture dialog which is a lot more clunky.
Go to http://gettag.mobi on your device to download the client. You can sign in to the tag.microsoft.com website using a Passport and create new tags yourself. Apparently this will support other 2d barcode types in the future for now it uses HCCB an arrangement of coloured triangles.
The attached PDF contains a generated tag to get you started.
 
Have fun!
#    |
# Friday, November 21, 2008

Interesting email from HTC support

I was quite surprised at an email I got from HTC Support today in regards to a specific device update:-

"Hello,

There will be no Windows Mobile 6.1 upgrade for any HTC Touch device.

Please do not reply to this email as this email address is not monitored for replies.

Best regards,

Carolin

HTC Europe"

#    |
# Friday, October 31, 2008

Live Mesh for Windows Mobile

The Windows Mobile client for Live Mesh is now available. You can download it from your device from http://m.mesh.com

I've just installed it onto my phone and have been taking a look. On the desktop the Mesh client is quite tightly integrated into the explorer shell - it adds an extra pane alongside your folder windows showing the status of your synchronised folders. On devices the same level of integration is not possible (nor is there the screen real-estate). Therefore the mobile Mesh client runs as a separate application allowing you to manage which folders are synchronised. If you select a folder it opens separately in File Explorer to show the contents, you don't get any fancy icons to show the synchronisation status. The main menu in the Mesh client provides access to the members and news of that folder - the content you would normally see in the Mesh pane. This opens in an Internet Explorer window and is actually a mobile formatted version of the mesh web application. Also from the menu you can force a manual synchronisation and change the settings for automatic synchronisation.

In summary it is quite a simple client and does a good job of extending your Mesh files onto your mobile device. One of the key features is synchronisation of photos and it will automatically setup the \My Documents\My Pictures folder to synchronise with a "Mobile Pictures" folder in your Mesh. Unfortunately this wasn't immediately useful to me as I save photos to the storage card, but it's simple enough to setup Synchronisation of any other folder from the device.

#    |