Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Using the Motorola MOTODEV i1 SDK add-on

on

  • 2,493 views

this presentation covers how to use the i1 SDK add-on now available on developer.motorola.com

this presentation covers how to use the i1 SDK add-on now available on developer.motorola.com

Statistics

Views

Total Views
2,493
Views on SlideShare
2,491
Embed Views
2

Actions

Likes
1
Downloads
30
Comments
0

1 Embed 2

http://www.verious.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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

Using the Motorola MOTODEV i1 SDK add-on Using the Motorola MOTODEV i1 SDK add-on Presentation Transcript

  • BUSINESS UNIT NAME (Arial Bold, Caps, 24pt) Subhead (Arial, U/L, 18pt) Lori Fraleigh Director Developer Platforms, Tools, and Technical Services 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.
  • LEADERSHIP starts here
  • DEVELOP DESIGN DISCOVER DISTRIBUTE
  • DESIGN DETAILED PRODUCT INFORMATION AND SPECS PRACTICAL ADVICE, ARTICLES, DOCUMENTATION EXPERT SUPPORT, FORUMS, KNOWLEDGE BASE COMMUNITY INTERACTION, BLOGS, PODCASTS GLOBAL NEWS, EVENTS AND TRAINING
  • DESIGN DESIGN DEVELOP GREAT OUT-OF-BOX EXPERIENCE BUILT ON ECLIPSE ACTIVITY CREATION WIZARDS CODE SNIPPETS IMPROVED LOCALIZATION TOOLS DEVICE EMULATORS
  • DESIGN DEVELOP REMOTE ON-DEVICE TESTING ACCESS TO LIVE REGIONAL NETWORKS EARLY ACCESS – GET TO MARKET FIRST
  • DISCOVER DESIGN DEVELOP DEVELOP EARLY ACCESS TO TOOLS, SDKS, SPECS, ARTICLES PRIVATE DISCUSSION BOARDS ACCESS TO PRE-RELEASE HARDWARE PREMIUM RESOURCES FROM WORLD-CLASS PROVIDERS
  • DESIGN DEVELOP DISCOVER DISTRIBUTE APP SUBMISSION INTEGRATED INTO MOTODEV INTEGRATED TESTINGAND CERTIFICATION TARGETED MERCHANDISING AND PROMOTIONS EFFECTIVELY SHOWCASE AND SELL YOUR SIGNATURE APPS
  • WE ARE INVESTING IN YOUR FUTURE
  • Motorola Mobility Anna Schaller Android Advocate Developer Community Technical Services 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
  • 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.
  • 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
  • Create Development Environment
    • Install in add-ons folder within Android SDK
  • Create Development Environment (con’t)
      • Importing them
        • File ->
        • Import ->
        • Existing Projects in Workspace
        • Browse to /add-ons/Motorola i1/samples folder
        • Create New Project from samples
    • Pull in iExchange Samples
  • Create Development Environment (con’t)
    • Two new projects
      • iExchangeSender
      • iExchangeReceiver
    • Two new libraries
      • motorola.provider.jar
      • iexchangelib.jar
  • Create Development Environment (con’t)
    • Create i1 AVD
      • Select Motorola i1 APIs as target
  • Create Development Environment (con’t)
    • Bring up emulator
  • 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
  • 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
  • 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….
  • 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
  • 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
  • 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)
  • 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
  • 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
  • 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
  • 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
  • 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)
  • 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=&quot; com.motorola.android.iexchange.permission.RECEIVE_IEXCHANGE &quot;></uses-permission> <uses-permission android:name=&quot; com.motorola.android.iexchange.permission.SEND_IEXCHANGE &quot;></uses-permission>
  • Code and Demo
  • HEADLINE (Arial Bold, Caps, 24pt) Place audio or video here
  • 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
  • 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)
  • 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()
  • 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>()
  • 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 &quot;content://&quot;
      • 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
  • 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)
  • i1 Extensions – Contact URIs
    • iDEN-specific Contacts URI’s
      • &quot;content://contacts/people-sdg“
      • &quot;content://contacts/people-talkgroup“
      • &quot;content://contacts/idendispatches“
      • &quot;content://contacts/idendispatches/#“
      • &quot;content://contacts/people/#/idendispatches“
      • &quot;content://contacts/people/#/idendispatches/#“
      • &quot;content://contacts/idendispatches/filter_name/*“
      • <. . .>
    • Check documentation to find out what data set is available to build you projection
  • 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( &quot;content://contacts/idendispatches&quot; ), PROJECTION, null , null, null );
  • 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)
  • 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……
  • CONTACTS
    • Join developer program at developer.motorola.com
      • MOTODEV Studio
      • Product SDK Add-Ons
      • Technical Articles
      • Developer Forum
      • Product Specs
      • More……
  • 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.
  • LEGAL
    • Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); 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 &quot;AS IS&quot; 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.