Lecture 2 Android Concepts Topics Framework Components Intent

  • Slides: 29
Download presentation
Lecture 2: Android Concepts Topics: Framework, Components, Intent Date: Jan 28, 2016

Lecture 2: Android Concepts Topics: Framework, Components, Intent Date: Jan 28, 2016

References (study these) • http: //source. android. com/source/index. html • http: //source. android. com/devices/index.

References (study these) • http: //source. android. com/source/index. html • http: //source. android. com/devices/index. html • http: //developer. android. com/guide/components/fundamentals. html • http: //developer. android. com/training/basics/intents/sending. html • http: //developer. android. com/guide/components/intents-filters. html • http: //developer. android. com/training/camera/photobasics. html

Android Stack

Android Stack

Android Interfaces and Architecture

Android Interfaces and Architecture

Application Fundamentals • Android SDK tools compile your code (along with data and resource

Application Fundamentals • Android SDK tools compile your code (along with data and resource files) into an APK. • Each app lives in its own security sandbox: • • • Android OS is a multi-user Linux system. Each app is a different user (unique user ID). Every app runs in its own Linux process. Each process has its own virtual machine (VM). Android starts/terminates the process based on the need for an app's components to be executed.

App Components • Activity • Service • Content Provider • Broadcast Receiver Activity Service

App Components • Activity • Service • Content Provider • Broadcast Receiver Activity Service Content Provider Activity Broadcast Receiver An Example APP

App Components • Activity • Service • Content Provider • Broadcast Receiver Activity Eight-Queens

App Components • Activity • Service • Content Provider • Broadcast Receiver Activity Eight-Queens Puzzle APP (most of you)

The Manifest File • Android. Manifest. xml – Must declare all the app components

The Manifest File • Android. Manifest. xml – Must declare all the app components in this file. • This file also contains: • • Permissions API Level (min and target) HW/SW features used Other API libraries

The Manifest File • <service> elements for services • <receiver> elements for broadcast receivers

The Manifest File • <service> elements for services • <receiver> elements for broadcast receivers • <provider> elements for content providers • <activity> elements for activities • Activities, services, and content providers that you include in your source but do not declare in the manifest are not visible to the system and, consequently, can never run. • Broadcast receivers can be either declared in the manifest or created dynamically in code (as Broadcast. Receiver objects) and registered with the system by calling register. Receiver().

Activity • An activity represents a single screen with a user interface.

Activity • An activity represents a single screen with a user interface.

Service • Runs in the background to perform long running operations for remote processes.

Service • Runs in the background to perform long running operations for remote processes. • A service DOES NOT provide a user interface. Settings>Developer Options>Running Services

Content Provider • A content provider manages a shared set of app data. •

Content Provider • A content provider manages a shared set of app data. • Other apps can query or even modify the data. • You can store the data in the file system, an SQLite database, on the web, or any other persistent storage location your app can access.

Broadcast Receiver • A broadcast receiver is a component that responds to system-wide broadcast

Broadcast Receiver • A broadcast receiver is a component that responds to system-wide broadcast announcements. • Broadcast receivers don't display a user interface, they may create a status bar notification.

Multiple Entry Points • One component can start another component Another App Activity User

Multiple Entry Points • One component can start another component Another App Activity User Another App Service Content Provider Activity Broadcast Receiver An Example APP

Example • One component can start another component

Example • One component can start another component

“Intent”: Activating components • Three of the four component types—activities, services, and broadcast receivers—are

“Intent”: Activating components • Three of the four component types—activities, services, and broadcast receivers—are activated by an asynchronous message called an intent. • Intents bind individual components to each other at runtime. Intent

“Intent”: Activating Component • You can start an activity (or give it something new

“Intent”: Activating Component • You can start an activity (or give it something new to do) by passing an Intent to start. Activity() or start. Activity. For. Result() (when you want the activity to return a result). • You can start a service (or give new instructions to an ongoing service) by passing an Intent to start. Service(). Or you can bind to the service by passing an Intent to bind. Service(). • You can initiate a broadcast by passing an Intent to methods like send. Broadcast(), send. Ordered. Broadcast(), or send. Sticky. Broadcast(). • You can perform a query to a content provider by calling query() on a Content. Resolver.

Explicit Intents • Explicit – using the component’s class name. Activity 1 Intent x

Explicit Intents • Explicit – using the component’s class name. Activity 1 Intent x = new Intent(this, Activity 2. class); start. Activity(x); Activity 2

Explicit Intent Example – with data • We want to switch to an Activity

Explicit Intent Example – with data • We want to switch to an Activity and pass some data to it. Intent X = new Intent(this, Activity 2. class); X. set. Data(“some Uri”); start. Activity(X); To access the data in the other Activity: “get. Intent(). get. Data()”

Practice • We want to pass strings between Activities: • Create Activity 1 (add

Practice • We want to pass strings between Activities: • Create Activity 1 (add a button) • Create Activity 2 (add a textview) • Send Intent from Activity 1 to Activity 2 • Send Intent with Data

Implicit Intents • Implicit – using some reserved keywords. • You provide type of

Implicit Intents • Implicit – using some reserved keywords. • You provide type of action to be performed • You provide data to be used (optional) • Multiple matching Activities may exist.

Practice: Implicit Intent Example • We want to VIEW a webpage in a browser:

Practice: Implicit Intent Example • We want to VIEW a webpage in a browser: Intent w = new Intent( Intent. ACTION_VIEW, Uri. parse(“http: //www. unc. edu”) );

Practice: Implicit Intent Example • We want to VIEW a location on a map:

Practice: Implicit Intent Example • We want to VIEW a location on a map: Intent w = new Intent( Intent. ACTION_VIEW, Uri. parse(“geo: 35. 909715, -79. 052779? Z=14”) );

What if no one to receive my Intent? • Your App will crash! •

What if no one to receive my Intent? • Your App will crash! • To get a list of matching Apps: get. Package. Manager(). query. Intent. Activities( your_intent, Package. Manager. MATCH_DEFAULT_ONLY ); • To verify that the Intent will resolve to an Activity: X. resolve. Activity(get. Package. Manager()) != null

How to receive an Intent? • You specify <intent-filter> in your manifest. Other Activity

How to receive an Intent? • You specify <intent-filter> in your manifest. Other Activity ACTION_MAIN LAUNCHER Your Activity <activity android: name="Main. Activity"> <!-- This activity is the main entry, should appear in app launcher --> <intent-filter> <action android: name="android. intent. action. MAIN" /> <category android: name="android. intent. category. LAUNCHER" /> </intent-filter> </activity>

Example: intent-filter • Your App can send or share a text. Other Activity ACTION_SEND

Example: intent-filter • Your App can send or share a text. Other Activity ACTION_SEND Plain text Your Activity <intent-filter> <action android: name="android. intent. action. SEND"/> <category android: name="android. intent. category. DEFAULT"/> <data android: mime. Type="text/plain"/> </intent-filter> You must include the CATEGORY_DEFAULT to receive implicit intents.

Getting Results Back • We want an Activity to do something and return the

Getting Results Back • We want an Activity to do something and return the result back to us. Step 1: start. Activity. For. Result(intent_object, SOME_REQ_CODE); Step 2: @Override protected void on. Activity. Result (int request. Code, int result. Code, Intent data) { }

Practice: Implicit Intent with Camera Intent w = new Intent(Media. Store. ACTION_IMAGE_CAPTURE); start. Activity(w);

Practice: Implicit Intent with Camera Intent w = new Intent(Media. Store. ACTION_IMAGE_CAPTURE); start. Activity(w); Just uses the camera. Returns no photos.

Practice: Getting the Image Back! Intent w = new Intent(Media. Store. ACTION_IMAGE_CAPTURE); start. Activity.

Practice: Getting the Image Back! Intent w = new Intent(Media. Store. ACTION_IMAGE_CAPTURE); start. Activity. For. Result(w, 1); @Override protected void on. Activity. Result(int request. Code, int result. Code, Intent x) { //if (request. Code == 1 && result. Code == RESULT_OK) { Bundle extras = x. get. Extras(); Bitmap image. Bitmap = (Bitmap) extras. get("data"); img = (Image. View) find. View. By. Id(R. id. image. View); img. set. Image. Bitmap(image. Bitmap); } }