0% found this document useful (0 votes)
116 views

Android Tutorial

Android sensors can provide information about motion, position, environment, and other device characteristics. The document discusses accessing sensor data in Android code using a SensorManager and registering listener callbacks to handle sensor events. It also covers the properties of different sensors like sampling rates and parameter types. The goal is to help readers understand how to code simple Android sensor applications and properly utilize each sensor.

Uploaded by

prasadzeal
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
116 views

Android Tutorial

Android sensors can provide information about motion, position, environment, and other device characteristics. The document discusses accessing sensor data in Android code using a SensorManager and registering listener callbacks to handle sensor events. It also covers the properties of different sensors like sampling rates and parameter types. The goal is to help readers understand how to code simple Android sensor applications and properly utilize each sensor.

Uploaded by

prasadzeal
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 40

Android Concepts and Programming

TUTORIAL 1

Kartik Sankaran
kar.kbc@gmail.com

CS4222 Wireless and Sensor Networks

[2nd Semester 2013-14]


20th January 2014

Agenda
PART 1: Introduction to Android

- Simple Android Apps: HelloWorldApp and ButtonApp


PART 2: Introduction to Sensors
- Simple Sensor App: AngleApp
Goal of the Tutorials:

- Help you quickly get started with Android programming.


- Cover concepts not explained well on the Android website.

Introduction to Android
What is Android?
- Linux-based Operating System for mobile devices

- Developed by Android, Inc. (later purchased by Google)


- First Android phone in October 2008
- Multiple companies producing Android phones:

Samsung, HTC, LG,


Motorola, ASUS,
and many others

Introduction to Android
Android is not just Linux ported to mobile phones
- Linux code:

< 500 MB
- Android code:
> 10 GB
Why Linux?

- Process
management
- Security
- Code can be
forked
4

Introduction to Android
Android Version History: (most phones run Jelly Bean)

Introduction to Android
Typical specs:
- 1 GB RAM, 16 GB flash storage, 1 GHz multi-core processor, GPU

- Have variety of sensors!


- Limited battery : approx 2000 mAh
Mobiles have limited memory (not anymore!):
- Android can kill an App taking too much memory

- Each App has an upper limit on heap space: 32 MB on Galaxy Nexus


Major battery drainers:
- Display, Processor, 3G, GPS
6

Introduction to Android
How does Android manage Applications?
- Multiple applications can run at same time

- Only one instance of an App runs at a time


- Typical buttons: Home, Back, Menu, Search
Home button:
Similar to minimizing a window (state retained)
Back button:
Similar to closing a window (state destroyed)

- After App destroyed, its still in memory!

Introduction to Android
How to write Applications?
- Apps are mostly written in Java.

- Compiled to Dalvik (dex) code.


(Dalvik is a village in Iceland)

Each App runs:


- On Dalvik VM
- Separate process
- Separate User ID (for security)

Why Dalvik?
- Memory Optimized
(Jar 113 KB Dex 20 KB)

- Avoid paying money to Sun (Oracle)

Why not directly convert Java Dex?


- Use 3rd party Java libraries

(Image from Marakanas slides on Android Internals)

Your first Android program


Installation Steps:
1. Install Java (Version 6 or above)

If any problem, then


email/meet me

2. Install Android SDK


- http://developer.android.com/sdk/index.html

Your first Android program


Installation Steps:
3. Install Android APIs (needs a good internet connection, takes a while)

- http://developer.android.com/sdk/installing/adding-packages.html
- SDK Manager.exe (at root of SDK installation folder)
- API 17 + SDK tools + SDK platform tools are needed

10

Your first Android program


Installation Steps:
4. Install an IDE of your choice

a. Eclipse
- ADT Bundle has Android SDK + Eclipse IDE + ADT Plugin
http://developer.android.com/sdk/index.html

- If you already have

Eclipse (>= 3.6.2 Helios),


install the ADT plugin:
http://developer.android.com/sdk/installing/installing-adt.html

11

Your first Android program


Installation Steps:
4. Install an IDE of your choice

b. IntelliJ (approx 120 MB)


- http://www.jetbrains.com/idea/download/index.html

c. Emacs (or any text editor of your choice)

12

Your first Android program


Installation Steps:
5. Install phones device drivers (Mac users skip this step)

a. Windows
- http://developer.android.com/tools/extras/oem-usb.html
- http://www.samsung.com/us/support/owners/product/SCH-I515MSAVZW

b. Linux (/etc/udev/rules.d/51-android.rules)
- http://developer.android.com/tools/device.html
-

SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"


13

Your first Android program


Creating an Android project:

1. Using command line


$ android list targets

(to get target IDs)

$ android create project --target 9 --name HelloWorld --path


./HelloWorld --activity HelloWorldActivity --package
nus.cs4222.helloworld

2. Using an IDE
- File New Project
- Fill in the details, similar to above

14

Your first Android program


Project Structure:

src: Your source code


res/layout/main.xml: Your GUI
libs: Library jars
In Android, the GUI screen is called

an Activity
(will be covered in detail in
next tutorial)

15

Your first Android program


res/layout/main.xml : (already created by default)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>
16

Your first Android program


HelloWorldActivity.java : (already created by default)
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override

public void onCreate( Bundle savedInstanceState ) {


super.onCreate( savedInstanceState );

// Specify what GUI to use (res/layout/main.xml)


// R stands for Resources
setContentView( R.layout.main );

}
}
17

Turn on USB debugging on the phone:


Settings Developer Options
Enable USB Debugging
Make sure you installed the USB Driver
for this phone!

(in this case, Samsung Galaxy Nexus)

18

Build (compile) your App:


1. Using command line:
$ ant debug

2. Using an IDE:
Build button/menu
- App: bin/HelloWorld-debug.apk
Install App on phone:

1. Using command line:


$ adb install -r
bin/HelloWorld-debug.apk

2. Using an IDE:
Install/Run button/menu
19

Debugging (use the filter field most of the time):


Monitor.bat (AKA ddms.bat)

20

Your first Android program


Adding more GUI widgets:
- EditText: User can enter text here

- Button: Pressing it triggers an action


- TextView: Displays some text

1. Enter text here

2. Press the button

3. Text gets appended here

21

Your first Android program


res/layout/main.xml : (add Button and EditText widgets)
<LinearLayout ...>

<EditText android:id="@+id/EditText_Message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
Widgets have IDs
@ Referring to a resource
+ Adds this ID to the R class

android:text="" />
<Button android:id="@+id/Button_Send"

android:layout_width="fill_parent"

android:layout_height="wrap_content"
android:text="Send Message" />
<TextView

android:id="@+id/TextView_Message"
... />
</LinearLayout>

GUI layout defined using XML


22

Your first Android program


HelloWorldActivity.java :
public class HelloWorldActivity extends Activity {

/** Called when the activity is first created. */


public void onCreate( Bundle savedInstanceState ) {
...

}
GUI widgets in Java code

// Text View (displays messages)

private TextView textView_Message;


// Edit Text (user enters message here)
private EditText editText_Message;

// Button to trigger an action


private Button button_Send;
}
23

Your first Android program


HelloWorldActivity.java :
public class HelloWorldActivity extends Activity {

/** Called when the activity is first created. */


public void onCreate( Bundle savedInstanceState ) {
...

// Get references to the GUI widgets


textView_Message =
(TextView) findViewById( R.id.TextView_Message );

editText_Message =
(EditText) findViewById( R.id.EditText_Message );
button_Send =

(Button) findViewById( R.id.Button_Send );


}
}
24

Your first Android program


HelloWorldActivity.java :
public void onCreate( Bundle savedInstanceState ) {

...
// Set the button's click listener
button_Send.setOnClickListener(
new View.OnClickListener() {
public void onClick( View v ) {
// Change the text view
String newText = textView_Message.getText() +
"\n New Message: " +
editText_Message.getText();
textView_Message.setText ( newText );
}
} );
}

25

Your first Android program


Android online tutorials:

http://developer.android.com/guide/components/fundamentals.html
http://developer.android.com/training/basics/firstapp/index.html
Note: Many Android programmers directly jump into coding.
However, it is more important to understand the concepts first before
writing complex Apps. Otherwise, coding becomes a messy headache.

26

Break

Introduction to Sensors
1. What sensors are available? What do they sense?

2. How to access sensor data in Android?


3. What are the sensor properties and characteristics?
4. Why is it important to understand each sensors properties?
5. Simple Sensor App: AngleApp

28

Sensors What do they sense?


May be physical or virtual

1. Motion Sensors
- Accelerometer (also: Gravity, Linear Accl)
- Gyroscope
- Rotation Vector

http://www.youtube.com/watch?v=C7JQ7Rpwn2k

2. Position Sensors
- Magnetic Field
- Orientation

Understanding the physics


behind the sensors

- Proximity

3. Environmental Sensors

These sensors have


different APIs

- Temperature, Light, Pressure, Humidity

4. Others
- GPS, Camera, Microphone, Network
29

Sensors How to access them in code?


SensorManager manager = (SensorManager)
getSystemService( Context.SENSOR_SERVICE );
Sensor light = manager.getDefaultSensor( Sensor.TYPE_LIGHT );
protected void onResume() {
manager.registerListener( this, light,

Returns null if sensor not


present

SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {

Sampling Rate

manager.unregisterListener( this );
}
public void onSensorChanged( SensorEvent event ) {
float lux = event.values[0];
}

Why float and not double?

Listener for sensor changes


30

Sensors How to access them in code?


LocationManager manager = (LocationManager)
getSystemService( Context.LOCATION_SERVICE );
List <String> providers = manager.getProviders( true );
manager.requestLocationUpdates( gps,
TIME_PERIOD,

Returns subset of {gps,


network, passive }

MIN_DISTANCE_MOVED,
this );

Sampling Rate
(0 for max frequency)

manager.removeUpdates( this );
public void onLocationChanged( Location location ) {
double latitude = location.getLatitude();
}

Listener for location changes


31

Sensors Note about Location APIs


Two APIs:

- Old API: LocationManager (Raw GPS)


- New API: LocationClient (Filtered location value fused with sensors)
For PA1, use the old API.
For Project work, use the new API.

32

Sensors What rate to sample?


- Depends on event frequency (Eg: Walking, Occupancy)

- Power consideration (Eg: Accl 20 Hz v/s 1 Hz)


Android gotchas:
- Android delivers data at faster rate than specified
- Actual sampling rate can vary with time ( onSensorChanged() )

33

Sensors Properties, Characteristics, Errors


1. Accuracy and Precision

2. Noise (Eg: Accl)


3. Drift (Eg: Gyro)

34

Sensors Importance of understanding them


Example
Integrating Accelerometer (m/sec2) Velocity

v/s

Very Noisy

Integrating Gyroscope (radian/sec) Angle rotated


Less noisy, but
drifts with time
Combine Accl + Gyro:
Sensor Fusion
Q: Can Accl be used to
get distance?

35

Sensors Developing a good Sensor App


Example: Developing a Walking Fitness app
What sensors to use

Data Collection at required


sampling rate

Understand sensor
characteristics

Filtering, Signal Analysis,


Machine Learning, Calibration

36

Sensors AngleApp
App that displays angle of the phone with the horizontal plane

- Calculates the angle between the gravity vector [0, 0, g] and


phones positive y-axis

37

Sensors Different Co-ordinate axes


1. Phone co-ordinate axes (smartphone + tablet) used by sensors
2. World co-ordinate axes

3. Screen (virtual world) co-ordinate axes

remapCoordinateSystem()

getRotationMatrix()
38

Questions?

Thank You!

You might also like