cs378 - mobile computing content providers and content resolvers
TRANSCRIPT
![Page 1: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/1.jpg)
CS378 - Mobile Computing
Content Providers And Content Resolvers
![Page 2: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/2.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/4.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/9.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/12.jpg)
12
Accessing Content via Provider• After obtaining cursor:
• result:
![Page 13: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/14.jpg)
14
MediaStore.Images.Media• Columns documented in ContentProvider
classes and interfaces
![Page 15: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/15.jpg)
15
MediaStore.Images.Media Columns
![Page 16: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/16.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/17.jpg)
17
Showing Data in Logcat
![Page 18: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/18.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/19.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/20.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/21.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/22.jpg)
22
Result
![Page 23: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/23.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/24.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/25.jpg)
25
Display Data from ContentProvider
![Page 26: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/26.jpg)
26
Display Data from ContentProvider• rest of populateListView from ListActivity
![Page 27: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/27.jpg)
27
Subclass Adapter
![Page 28: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/28.jpg)
28
Results
![Page 29: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/29.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/30.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/31.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/32.jpg)
32
Calendar Event Add
![Page 33: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/33.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/34.jpg)
34
LOADERS
![Page 35: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/35.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/36.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/37.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/38.jpg)
38
CONTRACTS
![Page 39: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/39.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/40.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/41.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/42.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/43.jpg)
43
Bonus - Oracle v. Google
![Page 44: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/44.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/45.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/46.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/47.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/48.jpg)
48
Some of Oracle's Evidence
![Page 49: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/49.jpg)
49
Court Briefs• http://cand.uscourts.gov/wha/oraclevgoogle/docs
![Page 50: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/50.jpg)
50
RangeCheck method• java.util.Arrays, Google Android Code
![Page 51: CS378 - Mobile Computing Content Providers And Content Resolvers](https://reader036.vdocument.in/reader036/viewer/2022062422/56649e7c5503460f94b7ee15/html5/thumbnails/51.jpg)
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