The Moseycode application can be invoked from Android applications for the purpose of reading barcodes. Execution is temporarily ceded to Moseycode (by launching a sub-activity with a particular intent) for a user to scan a barcode at which point control is returned to the originating application along with information about the barcode(s) scanned. By design, the Moseycode user interface is completely uncluttered and should 'gel' with any style of application.
In principle, there is one way that Moseycode can currently be used from other applications: as sub activity to scan images containing barcodes; what can be varied is where the images are sourced and the information that is returned.
There is one action that can be used to invoke Moseycode as a sub activity:
com.tomgibara.android.SCAN_BARCODEBehaviour of the Moseycode activity is customized via the data URI and extras bundle.
The data URI of the intent specifies the source of the image(s) to be scanned for barcodes. At present four schemes are supported:
http/httpscontentgetContentResolver().openInputStream(data) .
The image format used must be one supported by the Android platform.propertyBitmap that has been stored as a property of the
intent's extras bundle. For example, for the URI property://photo
Moseycode will obtain the image data via (Bitmap) intent.getExtra("photo") .
Note: Subject to future feedback on performance and memory usage, this scheme may be removed.
cameracamera://0
refers to the primary camera on the device. Since the Android platform does not
currently support multiple camera devices, this is the only valid URI.file://) are not currently supported, support
has been deferred until anticipated changes to the operation of the Android file
system have been published.Note that for any of the above schemes, a data type must be specified so that
the intent will match the Moseycode IntentFilter. In the case of
the http and conten6 schemes, the image mime type
should be used (eg. image/jpeg or image/png) otherwise
image/* should be used.
In the case of moving images (ie. from a camera) the Moseycode activity will not finish until a barcode has been resolved (or the user cancels the activity by pressing the back button). For still images the activity will will finish if no barcode is located immediately.
The Moseycode activity can be further customized by supplying extra parameters to the Intent used to launch it.
message (type: String)return (type: String)"RAW" which returns the raw portal data.
In the future, "CHAMBER" (which returns a fully resolved chamber definition) and
"URL" (which returns the target URL of the barcode – if there is one)
will be supported. If this proprerty is omitted "RAW" is assumed.If the Moseycode activity doesn't fail (in the context of the Activity system).
The results of the barcode scan will be communicated in the extras bundle passed to
the Activity.onActivityResult method.
The bundle will contain properties named barcode/0, barcode/1, …
one for each barcode that was identfied. Such properties are guaranteed to be contiguously numbered.
If no barcodes were found, there will be no such named property. The order in which barcodes are
reported is undefined.
The property associated with each of these names is itself a Bundle that
contains information relating to that barcode. The following properties are supplied:
type (type: String)"Mosey".result (type: String)"RAW".chamberId (type: int)shortData (type: short)intData (type: int)checksum (type: short)chamberId, shortData and intData.For some information about how to interpret these numbers see the Moseycode Encoding documentation. Of course, your application is free to interpret the data in any way that it wants.
A fully documented sample Android application that demonstrates how to use Moseycode in your own applications is provided with this release. See the release page for links to download the demo application and its source code.