Android Support

We have brand new support on Android as of February 2013. It of course is compiled using Xamarin's MonoDroid toolset. http://xamarin.com/

There is support for Radio, DeviceInfo, Client.Connect, sending and receiving data, Discovering known devices, and Listener. It has been tested on a Nexus 7 and a Samsung Tab 2 7.0 device.

The library project file is in ...\ITH.Net.Android\ The current library project file targets version 2.3, i.e. API Level 10, see below. There is a solution file at ...\AndroidAaaa\

Test tool

A version of my cross-platform testing app has been created in ...\Testing\AndroidMenuTesting\ and the ~140 commands are displayed in the AppBar menu system. Press your device menu button to open that, on most devices with the vertical three dots at bottom-right. A few buttons provide shortcuts GetAllRadios, GetDeviceInfo, FlagsDiscover, Connect-SimpleClosingFirst, and Listen. See the screenshot below.

Android Permissions

http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#startDiscovery()
"Note: Most methods require the BLUETOOTH permission and some also require the BLUETOOTH_ADMIN permission"
We also need permission INTERNET because we use NetworkStream. If that becomes a problem we can maybe look at a workaround.

Details

Things not supported include:
  • Radio: Class of Device, versions, setting mode.
  • DeviceInfo: Setting name, LastUsed, Connected, versions, GetServiceRecords, SetServiceState, and InstalledServices.
  • Client.Connect: Available, DataAvailable, Connected, Client, LingerState, and LinkKey/Policy.
  • Discovery Devices:
  • Listener: Publishing custom Service Records, listening on a specific port number, and setting Service Class bits, LocalEndPoint is blank, and Pending. (Setting Service Name is supported.)
  • Security: No support.

Android API Level

We've used only functions from Android API Level 10, i.e. GINGERBREAD_MR1. We lose BluetoothSocket.isConnected by not using Level 14, which affects BluetoothClient.Connected. (We could probably get down to Level 5, if using createInsecureRfcommSocketToServiceRecord and listenUsingInsecureRfcommWithServiceRecord weren't required).
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels

To Do

  1. DONE. Support Device Discovery. So change AndroidBthClient to be a subclass of CommonDiscoveryBluetoothClient, create and register an Android BroadcastReceiver in AndroidBthInquiry which calls back whenever a device-found event occurs. That will provide support for both in-range and live discovery.
  2. DONE Check what Finalizers are required. Listener, and BluetoothClient/Stream.
  3. Provide socket errors. Currently we'll just pass any Mono-Android exceptions.
  4. Add Android to Feature support table page.

Compiling

#defines

Define Use
ANDROID Compiling to target the Mono Android platform -- not to do with Bluetooth API
ANDROID_BTH Include the 32feet.NET support for Bluetooth using the Android Bluetooth API
FAKE_ANDROID_BTH_API Include the Mock Android Bluetooth API classes

Related
NO_WINFORMS Exclude any WinForms usage, needed for instance when targeting Android
NO_WIDCOMM Hide special case Widcomm dependency checking in BluetoothFactory
NO_MSFT Hide code in e.g. BluetoothWin32Authentication referencing MSFT Bluetooth structs etc

For real use compiling for Android

As used by the preliminary project ITH.Net.Android.csproj
V2;FX3_5;ANDROID;ANDROID_BTH;NO_MSFT;NO_WINFORMS;NO_WIDCOMM
For running in the emulator add the FAKE_ANDROID_BTH_API define, which allows Radio, Devices, and Discovery currently.

For test on desktop Windows (project file FX2)

Do not reference the Mono.Android.dll. This includes Mocking of the Android API.
ANDROID_BTH;FAKE_ANDROID_BTH_API

For -- useless?? -- compile on desktop Windows (project file FX2)

Add reference to Mono.Android.dll, along with
ANDROID_BTH;NO_WINFORMS

The latter is required since System.Drawing.Size is also included in the Mono.Android.dll and so conflicts with that from the FCL's System.Drawing.dll.

AndroidMenuTesting screenshot

Screenshot_2013-02-20-09-53-45_r8.png

Last edited Mar 8, 2013 at 9:56 AM by alanjmcf, version 47

Comments

No comments yet.