Updated 2014-04-04 15:16:54 by Jorge

Name  edit

borg - control and interact with the Android OS. Part of AndroWish.

Synopsis  edit

borg cmd ?arg …?

Description  edit

This command integrates the capabilities of Tcl/Tk with an Android OS by way of several subcommands. These allow Tcl/Tk to go where it has never gone before by querying and controlling Bluetooth functionality, OS notifications (including device vibration and even speach), location information, etc.

Bluetooth-Related Commands

borg bluetooth subcmd
borg bluetooth devices
Returns a list suited for the "array set" command containing the Bluetooth address and friendly name of all paired Bluetooth devices.
borg bluetooth state
Returns the current Bluetooth state: on or off.
borg bluetooth scanmode
Returns the current Bluetooth scan mode (off, passive, visible, connectable, or on).
borg bluetooth myaddress
Returns the Bluetooth address of the local default Bluetooth adapter.
borg remoteaddress address
Returns the friendly name for the given Bluetooth address.

Network-Related Commands

borg networkinfo
Returns the current state of the network: none, wifi, mobile gsm, etc.

Destkop-Related Commands

borg shortcut subcmd
borg shortcut add name-of-shortcut script-to-run ?png-icon-as-base-64-string?
Adds an icon to the desktop, with the name-of-shortcut specified. The script, specified as script-to-run must use an absolute path must be readable by the user id under which the AndroWish package has been registered by the Android installer. The last (optional) parameter png-icon-as-base-64-string allows the icon graphic to be specified. If not provided, the AndroWish icon (Aladdin's lamp) is used.
borg shortcut delete name-of-shortcut
Deletes an icon from desktop (depends on Android launcher support).

Notification-Related Commands

borg notification add id title text
Adds a notification with title and text into the Android notification area. The integer id, specified by the caller, is used to identify the notification on deletion.
borg notification delete ?id?
Deletes a notification identified that was created with the id specified. If no id is provided, all notifications are deleted.
borg vibrate ms
Turns on the vibration motor for integer ms milliseconds.
borg beep
Plays the notification sound.
borg speak text ?lang pitch rate?
Gets the Android to read out the string text. Optional parameter lang is the language code for the spoken language, e.g. en, en_US, de, etc. Optional parameters pitch and rate control the voice and speed as float values. For more information, see http://developer.android.com/reference/android/speech/tts/TextToSpeech.html
borg stopspeak
Stops speech output.
borg isspeaking
Returns true or false depending on state of speech output.
borg endspeak
Stops speech output and releases system resources.
borg toast text ?flag?
Displays a text notification text for a short period of time. The duration of that display is somewhat longer when flag is specified as true.
borg spinner on|off
Displays or withdraws a spinner (rotating symbol indicating busy state) depending on argument.

Location-Related Commands

borg location subcmd
borg location start ?minrate-in-ms? ?min-dist-in-m?
Begins acquiring location data via the Android OS (which may choose to use GPS, network info, etc.).
borg location stop
Ends location data acquisition.
borg location get
Returns the location data (as a dictionary, suitable for array set) where the key is the location source. Location updates trigger a virtual event <<LocationUpdate>> (currently untested) that is sent to all toplevel widgets. These toplevel event-handlers should, in turn, invoke borg location get to refresh their knowledge.

System-Related Commands

borg displaymetrics
Returns information about the display in a dictionary (suitable for array set), e.g. display resolution, pixel density. See http://developer.android.com/reference/android/util/DisplayMetrics.html for details.
borg osbuildinfo
Returns information about the operating system and device in a dictionary (form suitable for array set), e.g. Android API level, version, device name, manufacturer etc. See http://developer.android.com/reference/android/os/Build.html for details.


borg activity action uri type ?categories? ?arguments? ?callback?
This a very flexible command that allows extensive access to the Android OS and other applications. categories and arguments are optional lists. callback is the name of the procedure that is evaluated when the activity action is complete. arguments are key-value pairs where the values are mapped to Java strings by default. If the key is a 2-element list made up of a data type indicator (int, byte, short, char, long, float, double, Uri) followed by the key, the value is converted to that data type. See below for some examples of this command. (?? categories argument ??)

borg activity Examples  edit

Sample code to open a browser on this wiki:
     borg activity android.intent.action.VIEW http://wiki.tcl.tk

Sample code to capture an image (only makes thumbnails - there are resizing problems):
    proc callback {retcode action uri mimetype categories data} {
        if {$retcode == -1} {
            # SUCCESS
            array set result $data
            if {[info exists result(data)]} {
                myphoto configure -data $result(data)
    package require Img
    image create photo myphoto
    borg activity android.media.action.IMAGE_CAPTURE {} {} {} {} callback

Sample code to capture an image, which works better but requires a file on external storage:
    proc callback {filename retcode action uri mimetype categories data} {
        if {$retcode == -1} {
            # SUCCESS
            myphoto configure -file $filename
            catch {file delete -force $filename}
    package require Img
    image create photo myphoto
    set filename [file join $env(EXTERNAL_FILES) myphoto.jpeg]
    borg activity android.media.action.IMAGE_CAPTURE {} {} {} \
       [list {Uri output} file://$filename] [list callback $filename]

Reading barcodes using the http://code.google.com/p/zxing barcode scanner (which needs to be be installed on your device):
    proc barcode_read {code action uri type cat data} {
        array set result $data
        if {[info exists result(SCAN_RESULT)]} {
            # that is the barcode
            # result(SCAN_RESULT_FORMAT) is the barcode format

    borg activity com.google.zxing.client.android.SCAN {} {} {} {} barcode_read