51
CS378 - Mobile Computing Content Providers And Content Resolvers

CS378 - Mobile Computing Content Providers And Content Resolvers

Embed Size (px)

Citation preview

Page 1: CS378 - Mobile Computing Content Providers And Content Resolvers

CS378 - Mobile Computing

Content Providers And Content Resolvers

Page 2: CS378 - Mobile Computing Content Providers And Content Resolvers

2

Content Providers• One of the four primary application

components:– activities– content providers– services–broadcast receivers

Page 3: CS378 - Mobile Computing Content Providers And Content Resolvers

3

Android Applications• Recall…• Each application runs as a different user

on the OS• private files, user id, separate process

with its own instance of the Dalvik VM• Content Providers and Content Resolvers

act as a bridge between applications to share data

Page 4: CS378 - Mobile Computing Content Providers And Content Resolvers

4

Content Providers• Standard mechanism / interface to allow code

in one process (app, content resolver) to access data from another process (app, content provider)– example, app to remind you to call certain people– content resolver accesses call log to check last

contact• manage access to a structured set of data• encapsulate the data and provide mechanisms

for defining data security

Page 5: CS378 - Mobile Computing Content Providers And Content Resolvers

5

Content Provider - Content Resolver

Calendar App Data

Call Log Data

Your App

ContentProvider

Content

Provider

ContentResolver

Content

Resolver

data

data

Page 6: CS378 - Mobile Computing Content Providers And Content Resolvers

6

Content Providers• Many of the built in applications have content

providers to allow other apps to access data• Examples of built in content providers– AlarmClock– CalendarContract (API level 14)– CallLog (sent and received calls)– ContactsContract– MediaStore (audio / visual data)– UserDictionary– VoicemailContract– many, many more

• http://developer.android.com/reference/android/provider/package-summary.html

Page 7: CS378 - Mobile Computing Content Providers And Content Resolvers

7

Content Providers• Provide access to a central data

repository– ability to read and write to centralized data

• data presented by Content Provider in the form of a table– like table from relational database

• Each row in data table one "piece" of data in repository

Page 8: CS378 - Mobile Computing Content Providers And Content Resolvers

8

Example Table• Data from user dictionary

• primary key optional• _ID column required to bind data from

provider to a ListView

Page 9: CS378 - Mobile Computing Content Providers And Content Resolvers

9

Accessing Data• Use a ContentResolver client object in your app• ContentResolver communicates with

ContentProvider– provides "CRUD" functionality, Create, Retrieve, Update, Delete

• matching methods in Content Resolver / Content Provider

• example: query() method• Create a cursor via content resolver to move

through rows of table

Page 10: CS378 - Mobile Computing Content Providers And Content Resolvers

10

Accessing Content via Provider• Example: Exploring Images on a device• MediaStore.Images.Media class is one of the

ContentProviders• get the cursor:

Page 11: CS378 - Mobile Computing Content Providers And Content Resolvers

11

Query• 5 parameters• uri for content, URI– look at class documentation, generally a constant

• projection, String[]– what columns to get from the table, null = all, inefficient

• selection clause, String– filter, what rows to include, a SQL WHERE clause

• selection args, String[]– replace ?'s in selection with these

• sortOrder, String– how to order the rows

Page 12: CS378 - Mobile Computing Content Providers And Content Resolvers

12

Accessing Content via Provider• After obtaining cursor:

• result:

Page 13: CS378 - Mobile Computing Content Providers And Content Resolvers

13

MediaStore.Images.Media• Columns from table:• According to Logcat:• [_id, _data, _size, _display_name,

mime_type, title, date_added, date_modified, description, picasa_id, isprivate, latitude, longitude, datetaken, orientation, mini_thumb_magic, bucket_id, bucket_display_name, width, height]

Page 14: CS378 - Mobile Computing Content Providers And Content Resolvers

14

MediaStore.Images.Media• Columns documented in ContentProvider

classes and interfaces

Page 15: CS378 - Mobile Computing Content Providers And Content Resolvers

15

MediaStore.Images.Media Columns

Page 16: CS378 - Mobile Computing Content Providers And Content Resolvers

16

Selection Columns• Limit Columns returned with projection

argument to query method that creates Cursor

Page 17: CS378 - Mobile Computing Content Providers And Content Resolvers

17

Showing Data in Logcat

Page 18: CS378 - Mobile Computing Content Providers And Content Resolvers

18

Cursor• The ContentResolver query method

creates and returns a Cursor• Similar to a Database Cursor– similar to Scanner or Iterator

• Move through the data (rows) one element at a time

• Process data with loop or bind cursor to a ListView with an Adapter

Page 19: CS378 - Mobile Computing Content Providers And Content Resolvers

19

Getting Data from Row• Must determine what form column data

is in, use getX method• refer to constants from ContentProvider

class• careful - some INTEGERS longs

Page 20: CS378 - Mobile Computing Content Providers And Content Resolvers

20

Using Selection Criteria• Example gets rows in table• the selection criteria and selection args

allow picking only certain rows• essentially an SQL WHERE clause– http://www.w3schools.com/sql/sql_where.asp

• specify a criteria that must be met• ? is value filled in with selectionArgs–multiple criteria possible, AND, OR, NOT

Page 21: CS378 - Mobile Computing Content Providers And Content Resolvers

21

Using Selection Criteria• Instead of selecting all rows, only select

rows with image size greater than some minimum value– recall: null, null returns all rows

Page 22: CS378 - Mobile Computing Content Providers And Content Resolvers

22

Result

Page 23: CS378 - Mobile Computing Content Providers And Content Resolvers

23

Why selectionCriteria and selectionArgs??

• Why not just say:– selectionCriteria =

"MediaStore.Images.Media.SIZE > 1750000"• SECURITY• If selection criteria is based on user input,

user could insert malicious SQL statements to attempt to delete data base table

• example:" MediaStore.Images.Media.SIZE > " + "nothing; DROP TABLE *;"

Page 24: CS378 - Mobile Computing Content Providers And Content Resolvers

24

Displaying Data in ListView• Specify columns to get from

ContentProvider• Create view that will hold data–one row

• Obtain cursor from ContentProvider• Use ListAdapter to convert data from

Cursor to Views• Sub class adapter to format text

Page 25: CS378 - Mobile Computing Content Providers And Content Resolvers

25

Display Data from ContentProvider

Page 26: CS378 - Mobile Computing Content Providers And Content Resolvers

26

Display Data from ContentProvider• rest of populateListView from ListActivity

Page 27: CS378 - Mobile Computing Content Providers And Content Resolvers

27

Subclass Adapter

Page 28: CS378 - Mobile Computing Content Providers And Content Resolvers

28

Results

Page 29: CS378 - Mobile Computing Content Providers And Content Resolvers

29

Permissions• Using certain content providers require

an application request permission– so user aware what content the application

will access and possibly modify

Page 30: CS378 - Mobile Computing Content Providers And Content Resolvers

30

Content Provider Capabilities• Possible to update, insert, and delete

data via a ContentProvider–CRUD

• insert, update, and delete methods part of ContentResolver class

• for example insert new calendar data or modify existing calendar data

Page 31: CS378 - Mobile Computing Content Providers And Content Resolvers

31

ContentProviders and Intents• Some Content Providers have such

common activities • created Intent Filters to handle the

operation• Example–Calendar has Intent Filter so other

applications can add events–opens form with data filled in, finish creation,

go back to original app, event added to calendar

Page 32: CS378 - Mobile Computing Content Providers And Content Resolvers

32

Calendar Event Add

Page 33: CS378 - Mobile Computing Content Providers And Content Resolvers

33

Single Data Elements• Sometimes you don't want all the data

from a Content Provider– you want one piece of data, one row from

the table• must have the ID value of the row and

the Content Provider must support this functionality

Page 34: CS378 - Mobile Computing Content Providers And Content Resolvers

34

LOADERS

Page 35: CS378 - Mobile Computing Content Providers And Content Resolvers

35

Loaders• Alternative approach to getting Cursor

from a ContentProvider• Accessing data from ContentProvider

may be a lengthy operation–doing this on the UI thread may lead to

ANR, unresponsiveness• Loader interfaces and classes used to do

this on a separate thread– create their own AsynchTask

Page 36: CS378 - Mobile Computing Content Providers And Content Resolvers

36

CursorLoader• create a loader–API level 11 or greater– ListView or ListFragment, but not ListActivity

• implement a class with the proper callback methods for when the CursorLoader is finished and data is ready for access– public Loader<Cursor> onCreateLoader(int id, Bundle args)– public void onLoadFinished(Loader<Cursor> loader,

Cursor data)

– public void onLoaderReset(Loader<Cursor> loader)

Page 37: CS378 - Mobile Computing Content Providers And Content Resolvers

37

Creating ContentProvider• It is possible to implement a ContentProvider for

your app• You may need / want to provide a ContentProvider

if:– You want to offer complex data or files to other

applications.– You want to allow users to copy complex data from

your app into other apps.– You want to provide custom search suggestions using

the search framework.• Not normally necessary until you create that

million download app

Page 38: CS378 - Mobile Computing Content Providers And Content Resolvers

38

CONTRACTS

Page 39: CS378 - Mobile Computing Content Providers And Content Resolvers

39

Contracts• Some apps that have content providers

provide Contract classes• "help work with Content provider Uris,

column names, intent actions, and other features of the content provider"

• Adds a layer of abstraction and encapsulation

Page 40: CS378 - Mobile Computing Content Providers And Content Resolvers

40

Contacts Contract

• Many nested classes• Provide information on the tables in the content

provider• … and some convenience methods for accessing

that data

Page 41: CS378 - Mobile Computing Content Providers And Content Resolvers

41

Contacts Contract• Example of abstraction• Possible to create cursor and pull out the

last time a contact was contacted

Page 42: CS378 - Mobile Computing Content Providers And Content Resolvers

42

Calendar and Contacts Providers• The Calendar and Contacts data used by many of

the apps on the device• Each have their own APIs to perform CRUD

operations– create, read, update, delete

• Calendar provider has tables for– Calendars, Events, Instances, Attendees, Reminders

• Contact provider manages as much data for each contact as possible leading to a complex organization–multiple contract classes for retrieval and

modification of contact data

Page 43: CS378 - Mobile Computing Content Providers And Content Resolvers

43

Bonus - Oracle v. Google

Page 44: CS378 - Mobile Computing Content Providers And Content Resolvers

44

Summary and Timeline• Oracle is suing Google for its use of Java in the Android

operating system• brief timeline from pc world• August 2005 -- Google buys Android Inc. Soon after, it

discusses the possibility of licensing Java from Sun.• October 2005 -- Andy Rubin, the head of Google's Android

division, writes in an email that Google can either adopt Microsoft's C# for Android or "do Java anyway and defend our decision, perhaps making enemies along the way." Over the next several months, Google and Sun continue to negotiate for a Java license but fail to reach a deal.

• February 2006 -- Sun supposedly offers Google a three-year Java license for US$20 million plus 10 percent of Google's Android-related revenue, capped at $25 million. Google rejects the offer.

Page 45: CS378 - Mobile Computing Content Providers And Content Resolvers

45

TimeLine Continued• November 2007 -- Google announces publicly that it is developing

Android, which includes a Java-compatible virtual machine called Dalvik.

• October 2008 -- HTC releases the first Android phone, the HTC Dream.• January 2010 -- Oracle acquires Sun and inherits its Java patents and

copyrights.• July 2010 -- Oracle meets with Google's lawyers to discuss Oracle's

patent infringement allegations.• Aug. 6, 2010 -- Rubin receives an email from a Google engineer stating

that the alternatives to Java "all suck" and that "we need to negotiate a license for Java under the terms we need."

• Aug. 12, 2010 -- Oracle files a lawsuit against Google, accusing it of infringing seven Java patents and its Java copyrights. Google denies any wrongdoing and calls the lawsuit a "baseless attack" on Google and open-source developers.

Page 46: CS378 - Mobile Computing Content Providers And Content Resolvers

46

Timeline Continued• January 2011 -- Android accounts for one-third of all

smartphone sales, Canalys says.• February 2011 -- Google asks the U.S. Patent and

Trademark Office to reexamine Oracle's patents, arguing they shouldn't have been issued. By the time the trial starts, only two of the seven patents remain in the suit.

• June 2011 -- A court filing reveals that Oracle is seeking between $1.4 billion and $6.1 billion in damages.

• July 2011 -- A judge rules that Oracle "overreached" with its damages estimate and tells it to recalculate.

Page 47: CS378 - Mobile Computing Content Providers And Content Resolvers

47

Timeline Continued• September 2011 -- The CEOs of Oracle and Google,

Larry Ellison and Larry Page, are ordered to hold settlement talks but can't reach agreement.

• November 2011 -- Android accounts for more than 50 percent of smartphone sales, Gartner says.

• March 2012 -- The two sides are ordered to hold more settlement talks but still can't reach a deal.

• April 2012 -- An eight-week jury trial is scheduled to begin Monday, April 16, at the U.S. District Court in San Francisco.

Page 48: CS378 - Mobile Computing Content Providers And Content Resolvers

48

Some of Oracle's Evidence

Page 49: CS378 - Mobile Computing Content Providers And Content Resolvers

49

Court Briefs• http://cand.uscourts.gov/wha/oraclevgoogle/docs

Page 50: CS378 - Mobile Computing Content Providers And Content Resolvers

50

RangeCheck method• java.util.Arrays, Google Android Code

Page 51: CS378 - Mobile Computing Content Providers And Content Resolvers

51

Court Briefs• The Introduction and Overview portions

are good summaries of the positions• read over the summaries provided• June 1, 2012 case was dismissed• Judge ruled APIs cannot be copyrighted• 9 lines of copied code –no violation, dismissed – rangeCheck method simple code