Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Â
Using the Motorola MOTODEV i1 SDK add-on
1. Subhead (Arial, U/L, 18pt)
Lori Fraleigh
Director
Developer Platforms, Tools, and Technical Services
BUSINESS UNIT NAME (Arial Bold, Caps, 24pt)
MOTOROLA and the Stylized M Logo are trademarks or registered trademarks of Motorola Trademark Holdings, LLC.
All other trademarks are the property of their respective owners. Š 2010 Motorola Mobility, Inc. All rights reserved.
2. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
starts here
LEADERSHIP
3. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
DEVELOPDESIGN DISCOVER DISTRIBUTE
4. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
DESIGN
DETAILED PRODUCT
INFORMATION AND SPECS
PRACTICAL ADVICE,
ARTICLES, DOCUMENTATION
EXPERT SUPPORT, FORUMS,
KNOWLEDGE BASE
COMMUNITY INTERACTION,
BLOGS, PODCASTS
GLOBAL NEWS, EVENTS
AND TRAINING
5. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
DESIGNDESIGN DEVELOP
GREAT OUT-OF-BOX EXPERIENCE
BUILT ON ECLIPSE
ACTIVITY CREATION WIZARDS
CODE SNIPPETS
IMPROVED LOCALIZATION TOOLS
DEVICE EMULATORS
6. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
DESIGN DEVELOP
REMOTE ON-DEVICE TESTING
ACCESS TO LIVE REGIONAL
NETWORKS
EARLY ACCESS â GET TO
MARKET FIRST
7. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
DISCOVERDESIGN DEVELOPDEVELOP
EARLY ACCESS TO TOOLS,
SDKS, SPECS, ARTICLES
PRIVATE DISCUSSION BOARDS
ACCESS TO PRE-RELEASE
HARDWARE
PREMIUM RESOURCES FROM
WORLD-CLASS PROVIDERS
8. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
DESIGN DEVELOP DISCOVER DISTRIBUTE
APP SUBMISSION INTEGRATED
INTO MOTODEV
INTEGRATED TESTINGAND
CERTIFICATION
TARGETED MERCHANDISING
AND PROMOTIONS
EFFECTIVELY SHOWCASE
AND SELL YOUR
SIGNATURE APPS
9. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
WE ARE INVESTING IN YOUR FUTURE
10. Anna Schaller
Android Advocate
Developer Community Technical Services
Motorola Mobility
MOTOROLA and the Stylized M Logo are trademarks or registered trademarks of Motorola Trademark Holdings, LLC.
All other trademarks are the property of their respective owners. Š 2010 Motorola Mobility, Inc. All rights reserved.
Using the Motorola i1
SDK Add-On
11. Agenda
00 Motorola i1 SDK Add-on Walkthrough
00 Working with the iExchange Service
01 Architecture
02 Using Intents to pass messages
03 Demo
00 Content Provider Extensions
01 Contacts
02 CallLog
03 MOTODEV Studio Database Explorer
Š 2010 Motorola Mobility, Inc.
12. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Using the i1 SDK Add-On
⢠Motorola i1 is based on Android 1.5
â i1 SDK add-on uses Android SDK 1.5 APIs
⢠Setting up development environment
â Install in add-ons folder within Android SDK
â Create a new projects from samples
â Create an AVD emulator for Motorola i1
â Bring up Motorola i1 emulator
13. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Create Development Environment
1. Install in add-ons folder within Android SDK
14. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Create Development Environment (conât)
a) Importing them
ďź File ->
ďź Import ->
ďź Existing Projects in
Workspace
ďź Browse to /add-
ons/Motorola
i1/samples folder
b) Create New Project
from samples
2. Pull in iExchange Samples
15. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Create Development Environment (conât)
⢠Two new projects
â iExchangeSender
â iExchangeReceiver
⢠Two new libraries
â motorola.provider.jar
â iexchangelib.jar
16. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Create Development Environment (conât)
3. Create i1 AVD
â Select Motorola i1 APIs
as target
17. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Create Development Environment (conât)
4. Bring up emulator
18. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Working with the iExchange Service
⢠Allows messages to be dispatched between
devices using the PTT protocol
â Takes advantage of empty frames of talk time for passing
data
⢠Three kinds of dispatch ids supported
â Private Id : 1-to-1 communication
â Group Id: 1-to-many communication
â SDG Id: Selective Dynamic Group Call
19. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
iExchange Architecture
⢠Components at every layer of Android to support
functionality
⢠Engine
â lowest level handles communication at RIL
⢠Background Service
â framework level handles communication between
engine and application
⢠Android application
â takes input from the user and broadcasts the message
using the iExchange library
20. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
iExchange Initialization
⢠When device starts up,
iExchange service registers
with iExchange engine and
waitsâŚ.
Package
Manager
Content
Provider
<âŚ>
iExchange
Service
iExchange
Engine network
BP layer
Framework layer
App
Application layer
⢠iExchange engine determines
whether the phone is connected to
the network and returns a connected
state to iExchange service
⢠Once iExchange service
receives connected state,
registers for message
intents and waits on
broadcast from iExchange
appsâŚ.
21. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
iExchange Communication
⢠Uses standard Android mechanisms already in place
⢠Activities, services, and broadcast receivers are activated
through structured messages embedded in an Intent
â Intents are used throughout Android for system-level
message passing (low battery, screen on, time zone change)
â Intents are also used in Android to launch another activity,
service, or broadcast receiver
â Once launched those activities, services, and broadcast
receivers can receive message intents while they are running
22. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
iExchange Communication (conât)
⢠Anatomy of an Intent
â Action: action to be performed or the action that took place and is
being reported (broadcast intents)
â Category: always set to CATEGORY_DEFAULT
â Extras: additional information (including data)
⢠Intents are delivered in one of three ways:
â startActivity(intent) launches an Activity -- if not already
started -- and delivers the embedded message
â startService(intent) launches a Service -- if not already
started -- and delivers the embedded message
â sendBroadcast(intent) launches a Broadcast Receiver and
delivers the embedded message
23. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Writing an iExchange App
⢠import com.motorola.android.ptx.IexchangeConstant;
⢠iExchange library (iexchangelib.jar)
â Request Intents: initiates action
â Response Intents: returns success or failure of action
request
â Indication Intents: indicates message was sent
â Permissions: for sending and receiving
⢠Communication requires two modes
â Message Sender (iExchangeSender sample)
â Message Receiver (iExchangeReceiver sample)
24. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Writing an iExchange App (conât)
⢠Standard Android app with two tasks
⢠Main task
â runs in UI thread
â extends Activity class
â broadcasts outbound messages
through iExchange intents
â does something with incoming
message
⢠Secondary task
â extends Broadcast Receiver class
â processes incoming iExchange intents
Activity
Broadcast
Receiver
25. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Dispatching Messages
Sending
Activity
Broadcast
Receiver
iExchange
Service
request intent
response intent
iExchange
Service
Receiving
Activity
Broadcast
Receiver
iExchangeSender
(phone 1)
iExchangeReceiver
(phone 2)
response intent
request intent
indication
intent
26. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
iExchange Request Intents
⢠Action
â ACTION_SEND_IEXCHANGE_PRIVATE_TEXT_MESSAGE
â ACTION_SEND_IEXCHANGE_PRIVATE_DATA_MESSAGE
â ACTION_SEND_IEXCHANGE_GROUP_TEXT_MESSAGE
â ACTION_SEND_IEXCHANGE_GROUP_DATA_MESSAGE
⢠Extra Data
â String DESTINATION_ADDR (Push-To-Talk Id - private)
â int LOCAL_PORT (Sender Port Identifier)
â int REMOTE_PORT (Receiver Port Identifier)
â String GROUP_NUMBER (Group Call ID - group)
â String AREA (Group Call Area - group)
â String TEXT (Message)
â byte[] DATA (Data)
⢠Category
â CATEGORY_DEFAULT
27. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
iExchange Indication Intent
⢠Extra Data
â byte IND_DATA_TYPE (Data type â âTâext or âBâinary)
â int IND_DATA_LENGTH (Length of data)
â byte[] IND_DATA (Data message)
â int IND_DATA_REMOTE_PORT (Senderâs Port Identifier)
⢠Action
â ACTION_IEXCHANGE_MESSAGE_RECEIVED
⢠Category
â CATEGORY_DEFAULT
28. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
iExchange Response Intent
⢠Action
â ACTION_IEXCHANGE_RESPONSE
⢠Category
â CATEGORY_DEFAULT
⢠Extra Data
â int RSP_IEXCHANGE_REQ_TYPE (SEND_PRIVATE_TEXT_MESSAGE)
(SEND_PRIVATE_DATA_MESSAGE)
(SEND_GROUP_TEXT_MESSAGE)
(SEND_GROUP_DATA_MESSAGE)
â byte RSP_IEXCHANGE_RESULT (RESULT_RESERVED)
(RESULT_SUCCESSFUL)
(RESULT_ERROR_INVALID_ID)
(RESULT_ERROR_MESSAGE_TOO_LONG)
(RESULT_ERROR_GENERIC_FAILURE)
(RESULT_IN_PROGRESS)
29. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
New Permissions
⢠RECEIVE_IEXCHANGE
â Allows the application to receive iExchange Response and
Indication Intents
⢠SEND_IEXCHANGE
â Allows the application to send iExchange Request Intents
<uses-permission
android:name="com.motorola.android.iexchange.permission
.RECEIVE_IEXCHANGE"></uses-permission>
<uses-permission
android:name="com.motorola.android.iexchange.permission
.SEND_IEXCHANGE"></uses-permission>
30. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Code and Demo
31. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
HEADLINE (Arial Bold, Caps, 24pt)
Place audio or video here
32. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Content Providers
⢠Generic interface mechanism that lets you share data
between applications
⢠By abstracting away the underlying data source,
Content Providers let you decouple your application
layer from the data layer, making your applications
data-source agnostic
⢠How a content provider actually stores its data under
the covers is up to its designer
⢠All content providers implement a common interface for
querying the provider and returning results
33. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Content Providers
⢠Many of the native databases have been made
available as Content Providers, accessible by 3rd party
applications
⢠Built-in Content Providers available to you:
â Browser
â CallLog
â Contacts
â MediaStore
â Settings
⢠Motorola i1 extends the Contacts and CallLog Content
Providers (and underlying tables)
34. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Content Resolvers
⢠Access to all Content Providers is handled through
ContentResolver objects calling
getContentResolver()
<. . .>
ContentResolver cr = getContentResolver();
<. . .>
⢠Can then use ContentResolverâs methods
â query()
â insert()
â delete()
35. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Queries and Cursors
⢠Queries in Android are returned as Cursor objects
⢠Cursors are a managed way of controlling your position
(row) in the result set of a database query
⢠To execute a queryâŚcall query()
ContentResolver cr = getContentResolver();
Cursor myCursor = cr.query(
Uri, // data set (e.g. table(s))
projection, // include table columns
where clause, // filter out rows
selection, // data for where â?â
sort order // sort in order
)
⢠Navigate query results with moveTo<position>()
36. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
URIs
⢠Each content provider exposes a public URI that uniquely
identifies its data set
⢠A content provider that controls multiple data sets (multiple
tables) exposes a separate URI for each one
⢠Two forms:
â All URIs for providers begin with the string "content://"
â Android defines CONTENT_URI constants for all the providers that
come with the platform
android.provider.Contacts.Phones.CONTENT_URI
android.provider.CallLog.Calls.CONTENT_URI
⢠Use both forms when working with the SDK add-on
depending on what data set you need
37. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
i1 Extensions - Contacts
⢠Access
â Generic URI is People.CONTENT_URI
â import android.provider.Contacts.People
â Iden URIs now join multiple tables together
â import motorola.provider.ContactsIdenExtensions
⢠Tables
â Two new tables IDENDISPATCHES (dispatch numbers) and
IDENIP (ip address)
â Existing PEOPLE table extended with 3 new fields
⢠iden_contact_type (private id vs group id vs sdg id)
⢠iden_member_count (member count of sdg entry)
⢠iden_primary_dispatch (link to idendispatch table)
38. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
i1 Extensions â Contact URIs
⢠iDEN-specific Contacts URIâs
â "content://contacts/people-sdgâ
â "content://contacts/people-talkgroupâ
â "content://contacts/idendispatchesâ
â "content://contacts/idendispatches/#â
â "content://contacts/people/#/idendispatchesâ
â "content://contacts/people/#/idendispatches/#â
â "content://contacts/idendispatches/filter_name/*â
â <. . .>
⢠Check documentation to find out what data set is
available to build you projection
39. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Using iDEN URIs
final String[] PROJECTION = new String[] {
People._ID, People.NAME,
PeopleIdenExtensionsColumns.PRIMARY_DISPATCH_ID,
PeopleIdenExtensionsColumns.CONTACT_TYPE,
IdenDispatches.NUMBER,
IdenDispatches.TYPE,
IdenDispatches.LABEL
};
ContentResolver cr = getContentResolver();
Cursor c =
cr.query(Uri.parse("content://contacts/idendispatches"),
PROJECTION, null , null, null );
40. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
i1 Extensions - CallLog
⢠Access
â Generic URI is Calls.CONTENT_URI
â import android.provider.CallLog.Calls.CONTENT_URI
â CallLog URIs join multiple tables together
â import motorola.provider.CallLogIdenExtensions
⢠Tables
â Call log is stored in contacts database in the CALL table
â New fields added to existing table
⢠Idencategory (phone call vs dispatch vs ptx attachment)
⢠Idennumber (dispatch ptt number)
⢠Idensubtype (subtype of dispatch â private, talkgroup, etc)
⢠Ipaddress (ip address)
⢠Membercount (member count of SDG entry)
41. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
MOTODEV Database Explorer
⢠Gives you a window
into Android databases
⢠Allows you to examine
and modify the contacts
database
⢠Only works on
emulator, does not work
on devices
⢠Letâs seeâŚâŚ
42. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
CONTACTS
⢠Join developer program at developer.motorola.com
â MOTODEV Studio
â Product SDK Add-Ons
â Technical Articles
â Developer Forum
â Product Specs
â MoreâŚâŚ
43. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
Device Giveaway
⢠Under 40 seats in this room is an
i1 postcard
⢠If you find a postcard, bring it and
your business card to booth #23
between 6:30 and 9:30 tonight
⢠Employees of Motorola, Sprint, or
any competitor of Motorola are
not eligible to win.
44. Working with the Motorola i1 SDK Add-On
Š 2010 Motorola Mobility, Inc.
LEGAL
⢠Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.
⢠Unless required by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific language
governing permissions and limitations under the License.
Hinweis der Redaktion
This page is based on the Title Slide master page. All fonts are Arial. Note font sizes and specs for line spacing, text box design and locations here and on actual pages. BUSINESS UNIT text box: all margins are 0, text anchor is bottom, height is .97â (width is flexible), text is flush left, position is horizontal .42â and vertical .46â from top left corner. Box should be aligned with nearest left guide. THIS TEXT BOX IS DEFINED ON MASTER SLIDE (location and design will reset to correct design when you reapply âtitle slideâ format) Subhead text box: all margins are 0, text anchor is top, height is .3â (width is flexible), text is flush left, position is horizontal .42â and vertical 1.42â from top left corner. Box should be aligned with nearest left guide PRESENTATION text box: all margins are 0, text anchor is top, height is 1.58â (width is flexible), text is flush left, position is horizontal .42â and vertical 4.6â from top left corner. Box should be aligned with nearest left guide THIS TEXT BOX IS DEFINED ON TITLE MASTER SLIDE (location and design will reset to correct design when you reapply âtitle slideâ format) Second Subhead text box: all margins are 0, text anchor is bottom, height is .6â (width is flexible), text is flush left, position is horizontal .42â and vertical 5.44â Copyright info text box: all margins are 0, text anchor is top, height is .22â (width is flexible), text is flush left, position is horizontal .46â and vertical 6.91â from top left corner. Version/date text box: THIS TEXT BOX IS LOCATED ON TITLE MASTER SLIDE, cannot be edited here. To edit items on the master of this slide, go to View/Master/Title Master. Do not move text boxes while editing content on Title Master. How to use this template file: Duplicate this file and change the title to reflect your project. Copy pages as needed within the file. Do not attempt to copy pages from this document into an unformatted fileâŚyou will lose the guidelines that are on these pages. If you donât see little dotted lines criss crossing the page, make sure you go to âViewâ and select âGuidesâ Also turn off âSnap to Grid.â This document has the color scheme defined with the approved color chord. You will also lose that if you copy pages from here into another file. To make sure text doesnât change size automatically, go to Preferences, go to the Edit tab, and make sure âautofit text to text placeholderâ is NOT selected.
Weâve put a focus on Android as our mobile platform and weâre extremely pleased with our strategy and investments Not only are we the largest manufacturer dedicated to succeeding with Android, now with 17 different phones in our portfolio reaching over 100 retail, carrier and distributor customers around the world. But we see this platform as the springboard to even greater innovationâŚfor a number of reasons Motorola is only interested in working with an open platform and open communities Android continues to give us that ability by being open source⌠Providing a open, vibrant and solid ecosystem Supporting an updateable OS with a growing number of available mobile applications Most important, it allow us to embrace and extend the Android experience⌠Innovating with software and services that allow us to differentiate ourselves with consumers, developers and carriers
In addition to the great distribution opportunities available with Android Market, Motorola has its own application storefront in China, Brazil, Argentina, and Mexico.
Same installation process that you would use for any SDK add-on. Copy into the add-on folder under your Android SDK. Contents of SDK add-on include: Docs folder with html files describing the iExchange service and the extensions made to the contacts and calllog databases Images folder containing three files needed to create an AVD (android virtual device) or emulator Libs folder containing the two new libraries supporting the new functionality and extensions Samples folder containing three sample projects (which we will walk through) Skins folder containing the images layered over the AVD to reflect what an Motorola i1 device looks like
Next you want to load the samples in the SDK add-on into your IDE (Studio or Eclipse) After launching Studio (or Eclipse) you can either import the sample projects or create a new project from the samples
Two type of intents: explicit (where you specify the recipient) and implicit (where anyone whoâs registered for this intent will receive it) The i1 extension uses both. Activities that are generating the message will broadcast with an implicit intent. The broadcast receivers that are listening for these intents will use an explicit intent to pass the message along.
Category is typically used to further refine the filter match on the intent but for purposes of the i1 it is always set to CATEGORY_DEFAULT. It just has to be set in your application because it is needed by the intent filtering mechanism to route the intent. Extras are a key-value pair that allow you to add information to the intent. The i1 has extra data targeted to message delivery. You get at this data with get() and put() methods.
There are no APIs associated with this extension. Just a series of constants that define the message types. Within the library the constants support the three different intent types: request, response, and indication intents. In order to broadcast or receive these intents there are two new permissions to add to your manifest file.
So lets look at the cycle around dispatching messages using two samples in SDK add-on â iExchangeSender and iExchangeReceiver You have the SendingActivity broadcasting a request intent. In this case sending private text message to a specific phone The iExchange Service is reqistered to pick up all request intents and forward them to the appropriate phone. On phone 1 the iExchange Service forwards the message to phone 2 The iExchange Service on phone 2 receives the request intent, repackages and moves the message to an indication intent, and broadcasts the new indication intent. The broadcast receiver in the iExchangeReceiver app picks up the indication intent, launches the receiving activity with the original message. The iExchange Service on phone 2 also sends a response intent back to the iExchange Service on phone 1, which forwards it to the broadcast receiver in the iExchangeSender app
Port numbers Legacy naming convention from UDP implementation on previous phones Integer values any length and combination Watch out for: port numbers may not be unique between applications
In itâs native format URIs begin with the string âcontent://â. There are predefined constants for the built-in content providers URI for the table that matches phone numbers to people URIs for the table of recent phone calls