an introduction to android...

22
AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Upload: others

Post on 23-Jan-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

AN INTRODUCTION TO ANDROID DEVELOPMENTCS231M | Alejandro Troccoli

Page 2: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Outline

Running task on separate threads

Calling native code from your application

Introduction to the Camera2 API.

Page 3: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Long running task

Long running tasks on the main thread can block the UI

App looks unresponsive

Page 4: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Use a separate Thread instead

Page 5: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Use Handlers to update UI

Page 6: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Add a Progress dialog

Page 7: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Outline

Running task on separate threads

Calling native code from your application

Introduction to the Camera2 API.

Page 8: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Adding native code: Java Native Interface

In the Java class, add a method without implementation and the native prefix

Create the jni headers:

> javah –d jni –classpath .\bin\classes edu.stanford.cs231m.helloandroid.HelloAndroidActivity

Page 9: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Adding native support

Right-click on project -> Android Tools -> Add Native Support

Page 10: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Android.mk

Makefile for NDK

Page 11: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

HelloAndroid.cpp

Page 12: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Let’s run it!

Modify the Java code to call square and run the app…

Page 13: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Unfortunately, HelloAndroid has stopped.

Need to load the native library into the Java virtual machine!

Page 14: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Application.mk

Makefile options that are applied to all modules!

Target ABI

Choice of STL implementation

Global compiler options..

Page 15: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Debugging Native Code

Enable debug build with NDK_DEBUG

Page 16: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Launch: Debug as Native app

Need to wait

for debugger to attach

Page 17: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Little trick to wait for debugger

Android.mk

Define waitForDebugger() and

insert a call to wait in your

program. Once the debugger

attaches, pause the program and

set _debug to 0.

Page 18: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Outline

Running task on separate threads

Calling native code from your application

Introduction to the Camera2 API.

Page 19: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

Camera 2 API

See Lecture 3 tutorial on wiki

Understand:

CameraManager

CameraDevice

CameraCaptureSession

Request

Page 20: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

CameraManager

Lists available cameras in the system

Provides access to cameras properties

Allows you to open cameras

Note: Need to add CAMERA permission in AndroidManifest.xml to

open a camera.

Page 21: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

CameraDevice

Gives you exclusive access to a camera.

Allows you to create a CameraCaptureSession.

Release the camera device when you are done with it!

Page 22: AN INTRODUCTION TO ANDROID DEVELOPMENTweb.stanford.edu/class/cs231m/lectures/lecture-3-native-dev-camera.pdf · AN INTRODUCTION TO ANDROID DEVELOPMENT CS231M | Alejandro Troccoli

CameraCaptureSession

Sets up the image capture data flow.

Queues requests to the camera system

Single

Bursts