Top Banner
Widgets, Native Development and Extras 1 Mobile Software Development Dr. Péter Ekler PhD. [email protected]
79

Android Native Development and extra features - AMORG

Feb 11, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Android Native Development and extra features - AMORG

Widgets, Native

Development and

Extras

1

Mobile Software Development

Dr. Péter Ekler [email protected]

Page 2: Android Native Development and extra features - AMORG

Execute OS commands:

Process process =

Runtime.getRuntime().exec(“ls");

It’s a linux…

Some commands require root privilege

Some special tricks

Mobile Software Development2

Page 3: Android Native Development and extra features - AMORG

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

try {

Process process = Runtime.getRuntime().exec("ls");

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(process.getInputStream()));

StringBuilder logString = new StringBuilder();

String line;

while ((line = bufferedReader.readLine()) != null) {

logString.append(line+"\n");

}

TextView tv = (TextView) findViewById(R.id.logTextView);

tv.setText(logString.toString());

} catch (IOException e) {

}

}

Some special tricks

Mobile Software Development3

Page 4: Android Native Development and extra features - AMORG

SCHEDULED TASKS -

ALARMMANAGER

Page 5: Android Native Development and extra features - AMORG

Android AlarmManager

AlarmManager System Service

Enables to run operations even when none of

the activities is in the background

Executes an Intent

Enables repeated operation as well

Use carefully and always consider how/when to

stop the repeated operations

Requires typically a BroadcastReceiver that

receives the “Alarm” event

Mobile Software Development5

Page 6: Android Native Development and extra features - AMORG

Schedule alarm// Create alarm intent.

Intent intent = new Intent(MainActivity.this,

WakeUpAlarmReceiver.class);

intent.putExtra("alarm_message", "mymessage");

PendingIntent sender =

PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);

// Schedule alarm.

Calendar calendar = Calendar.getInstance();

calendar.setTimeInMillis(System.currentTimeMillis());

calendar.add(Calendar.SECOND, 10);

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

am.setRepeating(AlarmManager.RTC_WAKEUP,

calendar.getTimeInMillis(), 10000, sender);

Mobile Software Development6

Page 7: Android Native Development and extra features - AMORG

BroadcastReceiver for Alarmspublic class WakeUpAlarmReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

try {

Bundle bundle = intent.getExtras();

String message =

bundle.getString("alarm_message");

Toast.makeText(context, message,

Toast.LENGTH_SHORT).show();

} catch (Exception e) {

e.printStackTrace();

}

}

}

Manifest:

<receiverandroid:process=":remote“ android:name="WakeUpAlarmReceiver"/>

Mobile Software Development7

Page 8: Android Native Development and extra features - AMORG

Cancel alarm

Intent intent =

new Intent(MainActivity.this,

WakeUpAlarmReceiver.class);

PendingIntent sender =

PendingIntent.getBroadcast(

MainActivity.this, 0, intent, 0);

AlarmManager am =

(AlarmManager)getSystemService(

A LARM_SERVICE);

am.cancel(sender);

Mobile Software Development8

Page 9: Android Native Development and extra features - AMORG

Let’s practice

Create an AlarmClock application that

plays an mp3 when alarm is on!

Mobile Software Development9

Page 10: Android Native Development and extra features - AMORG

WIDGETS AND LIVE

WALLPAPERS

Lecture 13

Page 11: Android Native Development and extra features - AMORG

Extending Android component model

Extend the application functionality:

Widget (mini application)

Live wallpaper

Useful and quick information for the user

New possibilities for development

Quick and easy to develop

Extend existing applications

Mobile Software Development11

Page 12: Android Native Development and extra features - AMORG

Live wallpaper

Available from Android 2.1

Animated interactive wallpaper

Reaches the platform API (2D and 3D drawing,

GPS, sensors, network handling, etc.)

Example:

Animated wallpaper that changes the background

based on the current location or time

Google maps

Mobile Software Development12

Page 13: Android Native Development and extra features - AMORG

Implementing life wallpapers

A Service that updates the wallpaper UI

onCreateEngine():

Creating WallpaperService.Engine object

The Engine is responsible for life cycle and drawing

It is very important to optimize the drawing because

of the CPU and Battery!

Handle life cycle functions carefully!

It is necessary to mark Live Wallpaper functionality in the

Manifest:

<uses-feature android:name="android.software.live_wallpaper" />

Mobile Software Development13

Page 14: Android Native Development and extra features - AMORG

Event handling on live wallpaper

onVisibilityChanged():

When it is in the background we should pause the

drawing and possible threads.

onOffsetsChanged():

Canges between home screens

onTouchEvent():

Screen touch event

onCommand():

It is possible to send commands to the live wallpaper

Mobile Software Development14

Page 15: Android Native Development and extra features - AMORG

Let’s practice

Create an application that

displays the current time on

the wallpaper when

touching the screen!

Mobile Software Development15

Page 16: Android Native Development and extra features - AMORG

Live wallpaper - Manifest<manifest xmlns:android=http://schemas.android.com/apk/res/android

package="hu.bute.daai.amorg.examples">

<uses-sdk android:minSdkVersion="7" />

<uses-feature android:name="android.software.live_wallpaper" />

<application

android:label="@string/wallpapers"

android:icon="@drawable/ic_launcher_wallpaper">

<service

android:label="@string/my_wallpaper"

android:name=".MyWallpaper”

android:permission="android.permission.BIND_WALLPAPER">

<intent-filter>

<action android:name="android.service.wallpaper.WallpaperService" />

</intent-filter>

<meta-data android:name="android.service.wallpaper“

android:resource="@xml/mywall" />

</service>

</application>

</manifest>

Mobile Software Development16

Page 17: Android Native Development and extra features - AMORG

Live wallpaper – source 1/2

public class CubeWallpaper1 extends

WallpaperService {

private final Handler mHandler =

new Handler();

@Override

public void onCreate() {

super.onCreate();

}

@Override

public void onDestroy() {

super.onDestroy();

}

@Override

public Engine onCreateEngine() {

return new CubeEngine();

}

class CubeEngine extends Engine {

private final Paint mPaint = new Paint();

private float mTouchX = 0;

private float mTouchY = 0;

CubeEngine() {

final Paint paint = mPaint;

paint.setColor(0xffffffff);

paint.setTextSize(25);

}

Mobile Software Development17

Page 18: Android Native Development and extra features - AMORG

Live wallpaper – source 2/2

@Override

public void onCreate(SurfaceHolder surfaceHolder)

{

super.onCreate(surfaceHolder);

// Érintés eseményre kezelés jelzése

setTouchEventsEnabled(true);

}

@Override

public void onTouchEvent(MotionEvent event) {

super.onTouchEvent(event);

if (event.getAction()==

MotionEvent.ACTION_UP) {

mTouchX=-1; mTouchY=-1;

} else {

mTouchX = event.getX();

mTouchY = event.getY();

}

drawFrame();

}

void drawFrame() {

final SurfaceHolder holder =

getSurfaceHolder();

Canvas c = null;

try {

c = holder.lockCanvas();

if (c != null) {

c.save();

c.drawColor(0xff000000);

c.drawText(

new Date(System.currentTimeMillis()).

toLocaleString(),

mTouchX, mTouchY, mPaint);

c.restore();

}

} finally {

if (c != null)

holder.unlockCanvasAndPost(c);

}

}}} // osztály bezárása

Mobile Software Development18

Page 19: Android Native Development and extra features - AMORG

Live wallpaper example - game

Labyrinth game on live wallpaper

Mobile Software Development19

Page 20: Android Native Development and extra features - AMORG

Widgets – mini applications

Small applications that are typically

embedded in the home screen

Can contain UI controls

Refresh state periodically

E.g.: music player

Mobile Software Development20

Page 21: Android Native Development and extra features - AMORG

Widget components AppWidgetProviderInfo:

XML based

Meta data (layout, refresh interval, AppWidgetProvider class)

AppWidgetProvider:

Programming interface

Broadcast events: updated, enabled, disabled, deleted

View layout:

XML

Configuration Activity:

Optional

Launches at widget first start

Mobile Software Development21

Page 22: Android Native Development and extra features - AMORG

Widget Manifest<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="hu.bute.daai.amorg.examples"

android:versionCode="1"

android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

<!-- Broadcast Receiver fog frissíeni -->

<receiver android:name=".HelloWidget" android:label="@string/app_name">

<intent-filter>

<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

</intent-filter>

<meta-data android:name="android.appwidget.provider„

android:resource="@xml/hello_widget_provider" />

</receiver>

</application>

</manifest>

Mobile Software Development22

Page 23: Android Native Development and extra features - AMORG

Widget AppWidgetProviderInfo XML

<?xml version="1.0" encoding="utf-8"?>

<appwidget-provider xmlns:android=

"http://schemas.android.com/apk/res/android"

android:minWidth="146dip"

android:minHeight="72dip"

android:updatePeriodMillis="500"

android:initialLayout="@layout/main"

/>

Mobile Software Development23

Page 24: Android Native Development and extra features - AMORG

Widget Layout<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:orientation="vertical"

android:background="@drawable/amorg"

android:layout_gravity="center"

android:layout_height="wrap_content">

<TextView android:id="@+id/widget_textview"

android:text="@string/hello_text"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_gravity="center_horizontal|center"

android:layout_marginTop="5dip"

android:padding="10dip"

android:textColor="@android:color/black"/>

</LinearLayout>

Mobile Software Development24

Page 25: Android Native Development and extra features - AMORG

Widget AppWidgetProviderpublic class HelloWidget extends AppWidgetProvider {

@Override

public void onUpdate(Context context,

AppWidgetManager appWidgetManager,

int[] appWidgetIds) {

// refresh

}

}

Mobile Software Development25

Page 26: Android Native Development and extra features - AMORG

Which statement is false?

A. Widget is basically a BroadcastReceiver

component.

B. Live Wallpaper is basically a Service

component.

C. Widgets can not contain UI controls like

buttons.

D. Live wallpaper can handle touch events.

Mobile Software Development26

Page 27: Android Native Development and extra features - AMORG

Mini application on the home screen

Two refresh state:

Periodic refresh (minimum 30 mins)

Refresh via AlarmManager

Part of HomeScreen process

Initialized by a BroadcastReceiver

Continous refresh:

Launch a Service at onUpdate() that contains a

thread

Widget summary

Mobile Software Development27

Page 28: Android Native Development and extra features - AMORG

Let’s practice!

Create a widget that

refreshes its content in every

5 seconds!

Mobile Software Development28

Page 29: Android Native Development and extra features - AMORG

Widgets for project work

Now you can use widgets for

project work!

Mobile Software Development29

Page 30: Android Native Development and extra features - AMORG

NATIVE DEVELOPMENT

Page 31: Android Native Development and extra features - AMORG

Android NDK

NDK: Native Development Kit

NDK enables to create and reach native class libraries

from Java code

How can we do that?

JNI: Java Native Interface

Well known C++ development

Advantages:

Increase in speed

Code reuse (C++)

Download NDK:

http://developer.android.com/tools/sdk/ndk/index.html

Mobile Software Development31

Page 32: Android Native Development and extra features - AMORG

What does NDK offer?

Different tools and libraries for C and C++

compiling

Embed native class libraries into standard

Andorid applications (apk)

Natív class headers and libraries (e.g. native

Activity)

Documentation, examples and numerous

tutorials

Mobile Software Development32

Page 33: Android Native Development and extra features - AMORG

NDK hardware support

ARMv5TE (Thumb-1 instructions as well)

Supports ARM based devices

ARMv7-A (Thumb-2 and VFPv3-D16 instruction,

with optional NEON/VFPv3-D32 support)

Hardware FPU

x86 instructions

Note: Target can be defined in the

Application.mk file

Mobile Software Development33

Page 34: Android Native Development and extra features - AMORG

When does it worth to use NDK? 1/2

In many cases it is not required!

Think about the advantages and

disadvantages!

NDK does not increase speed always, but

it always increase complexity

Use only when it is really needed!

Mobile Software Development34

Page 35: Android Native Development and extra features - AMORG

When does it worth to use NDK? 2/2

Worth to use when:

Independent task

CPU intense operation where memory handling is

important

Signal processing

Physics simulation

Graphics (e.g.: 3D)

It is always worth to check whether there is an

existing Android API for it

Re-use working C/C++ libraries

Mobile Software Development35

Page 36: Android Native Development and extra features - AMORG

How to use native code?

Reach native library via JNI:

We can use standard Android tools

Call native library via JNI

Works on Android 1.5 and above

Native Activity:

Android 2.3 and above

NativActivity C++ class with life cycle methods

Other components are not implemented in

native code

Mobile Software Development36

Page 37: Android Native Development and extra features - AMORG

Supported native libraries 1/2

libc (C library) headers

libm (math library) headers

JNI interface headers

libz (Zlib compression) headers

liblog (Android logging) headers

Mobile Software Development37

Page 38: Android Native Development and extra features - AMORG

Supported native libraries 2/2

OpenGL ES 1.1 and OpenGL ES 2.0 (3D

graphics library) headers

libjnigraphics (reach pixel buffers) header

(Android 2.2 and above).

C++ supporting headers (minimal set)

OpenSL ES native audio library

Android native application library

Mobile Software Development38

Page 39: Android Native Development and extra features - AMORG

NDK documentation 1/3

INSTALL.HTML: NDK install and configuration

OVERVIEW.HTML: NDK abilities

ANDROID-MK.HTML: The structure of the Android.mk file

APPLICATION-MK.HTML: Application.mk file structure

CPLUSPLUS-SUPPORT.HTML: C++ support description

CPU-ARCH-ABIS.HTML: CPU architectures and keys

CPU-FEATURES.HTML: Introduces the cpufeatures static

library that can be use to detect CPU type and capabilities

during runtime

Mobile Software Development39

Page 40: Android Native Development and extra features - AMORG

NDK documentation 2/3

CPU-ARM-NEON.HTML: compilation steps to ARM

NEON and VFPv3-D32

CHANGES.HTML: changes in the current release

DEVELOPMENT.HTML: NDK release package

preparation steps

HOWTO.HTML: General information about NDK usage

IMPORT-MODULE.HTML: share and re-use modules

LICENSES.HTML: connected open source licenses

NATIVE-ACTIVITY.HTML: native Activity introduction

Mobile Software Development40

Page 41: Android Native Development and extra features - AMORG

NDK dokumentáció 3/3

NDK-BUILD.HTML: Introducing the ndk-build script

NDK-GDB.HTML: Native code debugger description

PREBUILTS.HTML: static and dynamic shared libraries

STANDALONE-TOOLCHAIN.HTML: how to use the

standalone compiler

SYSTEM-ISSUES.HTML: known bugs and issues

STABLE-APIS.HTML: APIs (headers) introduction

OVERVIEW.HTML: Overview

Mobile Software Development41

Page 42: Android Native Development and extra features - AMORG

NDK development environment

NDK download:

http://developer.android.com/tools/sdk/n

dk/index.html

Install Eclipse NDK plugin

NDK configuration: set NDK folder in

Eclipse

Right click on the project: “Add native

support”Mobile Software Development42

Page 43: Android Native Development and extra features - AMORG

NDK project elements 1/4

Android project folder can not contain

spaces!

New library: jni

All native components goes in the jni

folder:

Android.mk

Application.mk

hello.c

Mobile Software Development43

Page 44: Android Native Development and extra features - AMORG

NDK project elements 2/4

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# modul name and sources

LOCAL_MODULE := hello

LOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

Mobile Software Development44

Page 45: Android Native Development and extra features - AMORG

NDK project elements 3/4

Application.mk:

APP_PLATFORM := android-8

APP_ABI := armeabi-v7a

Mobile Software Development45

Page 46: Android Native Development and extra features - AMORG

NDK project elements 4/4

hello.c:

#include <string.h>

#include <jni.h>

jstring

Java_hu_bute_daai_amorg_examples_NativeLib_sayHello(JNIEnv* env,

jobject javaThis) {

return (*env)->NewStringUTF(

env, "Hello Android Csoport - nativ!");

}

jint Java_hu_bute_daai_amorg_examples_NativeLib_add(JNIEnv * env,

jobject javaThis, jint value1, jint value2) {

return (value1 + value2);

}

Mobile Software Development46

Page 47: Android Native Development and extra features - AMORG

Result of the compilation

libs and obj folders:

Mobile Software Development47

Page 48: Android Native Development and extra features - AMORG

First NDK application

NativeLib.java class:

public class NativeLib {

static {

System.loadLibrary("hello");

}

// native functions with same name as in hello.c

public native String sayHello();

public native int add( int v1, int v2 );

}

Mobile Software Development48

Page 49: Android Native Development and extra features - AMORG

First NDK application

Usage from an Activity:

public class NativeTestActivity extends Activity {

private NativeLib nativeLib;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

nativeLib = new NativeLib();

// Natív kód hívása

String hello = nativeLib.sayHello();

new AlertDialog.Builder(this).setMessage(hello).show();

}

}

Mobile Software Development49

Page 50: Android Native Development and extra features - AMORG

First NDK application

Mobile Software Development50

Page 51: Android Native Development and extra features - AMORG

NDK example

Calculate PI value through 1000000

iteration

Define CPU capabilities in Application.mk

file:

APP_PLATFORM := android-8

APP_ABI := armeabi-v7a

Mobile Software Development51

Page 52: Android Native Development and extra features - AMORG

Let’s practice!

Create an Android application

that calls native functions:

sayHello()

add(int a, int b)

pi(int iteration)

Calculate PI value via a specific

number of iterations

Mobile Software Development52

Page 53: Android Native Development and extra features - AMORG

Let’s practice!

Create an Android application

that reads out the light sensor

values from native code!

Create a button that can be

used to enable and disable

light sensor reading!

Mobile Software Development53

Page 54: Android Native Development and extra features - AMORG

EXTERNAL LIBRARIES

Page 55: Android Native Development and extra features - AMORG

Simple XML: XML serialization

http://simple.sourceforge.net/

ORM Lite: Object Relation Mapping

http://ormlite.com/sqlite_java_android_orm.shtml

Android UI patterns / Android patterns

https://play.google.com/store/apps/details?id=com.groidify.uipatterns&h

l=hu

http://www.androidpatterns.com/

kSoap: SOAP Web Service support

http://code.google.com/p/ksoap2-android/

box2D: 2D physics engine

http://code.google.com/p/androidbox2d/

AndEngine (contains box2D): Game engine

http://www.andengine.org/

Libraries 1/3

Mobile Software Development55

Page 56: Android Native Development and extra features - AMORG

libGDX: drawing and contains box2D as well

http://code.google.com/p/libgdx/

Acra / Bugsense: crash log

http://acra.ch/

https://github.com/ACRA/acra

Java Mail

http://code.google.com/p/javamail-android/

OpenCV: computer vision

http://opencv.org/platforms/android.html

Libraries 2/3

Mobile Software Development56

Page 57: Android Native Development and extra features - AMORG

ActionBarSherlock: ActionBar for Android 2.X,

already contains the SupportLib!

http://actionbarsherlock.com/

Unity: game engine

http://unity3d.com/unity/multiplatform/mobile

Commons.net: Apache Common Modul

http://commons.apache.org/net/

Zxing: barcode and QR code scanning

http://code.google.com/p/zxing/

Libraries 3/3

Mobile Software Development57

Page 58: Android Native Development and extra features - AMORG

Display advertisement

~5000 advertisement display ~ 3$

http://www.google.com/ads/admob/

Library:

https://developers.google.com/mobile-ads-sdk/

Developer gets an AdMob publisherID that

should be defined in the XML as the unit ID

For testing, the id should be checked in the

LogCat

AdMob

Mobile Software Development58

Page 59: Android Native Development and extra features - AMORG

<com.google.ads.AdView

android:id="@+id/adView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

ads:adSize="BANNER"

ads:adUnitId="MY_AD_UNIT_ID"

ads:loadAdOnCreate="true"

ads:testDevices="TEST_EMULATOR,

TEST_DEVICE_ID" />

AdMob layout

Mobile Software Development59

Page 60: Android Native Development and extra features - AMORG

http://coderesearchlabs.com/androidpdfwri

ter/

Supported functions

Page size

Font type

Embedding images

Drawing shapes

Android PDF Writer

Mobile Software Development60

Page 61: Android Native Development and extra features - AMORG

Let’s practice

Create an application that

generates a PDF!

Library:

http://avalon.aut.bme.hu/~tyrae

l/androidtanfolyam/pdfwriter.jar

Mobile Software Development61

Page 62: Android Native Development and extra features - AMORG

Cross-platform game development

framework

CPU intensive parts on Native libs

Useful pages:

http://libgdx.badlogicgames.com/

http://code.google.com/p/libgdx-users/

http://obviam.net/index.php/getting-started-in-

android-game-development-with-libgdx-

create-a-working-prototype-in-a-day-tutorial-

part-1/

LibGDX

Mobile Software Development62

Page 63: Android Native Development and extra features - AMORG

Let’s practice!

Create an AndEngine based demo!

Mobile Software Development63

Page 64: Android Native Development and extra features - AMORG

Let’s practice!

Create an application with

LibGDX that displays a ball!

Mobile Software Development64

Page 65: Android Native Development and extra features - AMORG

Acra Crashlog

Crash report to Google Docs, BugSense,

E-mail or personal page

Easy to use

Automatic crash report

More details

http://code.google.com/p/acra/wiki/ACRAHow

To

Mobile Software Development65

Page 66: Android Native Development and extra features - AMORG

Google I/O: always a good source!

Further tips

Mobile Software Development66

Page 67: Android Native Development and extra features - AMORG

Android 4.X New Features

App! Android update67

Page 68: Android Native Development and extra features - AMORG

Andriod 4.X versions

4.0 (14), 4.0.3 (15): Ice Cream Sandwich

4.1, 4.2, 4.3 (16, 17, 18): Jelly Bean

4.4 (19): KitKat

Detailed API changes:

http://developer.android.com/sdk/api_diff/18/changes.

html

General description:

http://developer.android.com/about/versions/jelly-

bean.html

App! Android update68

Page 69: Android Native Development and extra features - AMORG

4.0 and 4.0.3 new features

New Social API and Contacts Provider

Invite Intent

VoiceMail provider

Camera.FaceDetectionListener

Camera broadcast intent-ek

Camera.ACTION_NEW_PICTURE, Camera.ACTION_NEW_VIDEO

Spell Checker Service

Hover events (stylus and mouse is also supported!)

Text To Speech features

READ_SOCIAL_STREAM and WRITE_SOCIAL_STREAM

permissions

69 App! Android update

Page 70: Android Native Development and extra features - AMORG

4.1 new features

App stack navigation

android:parentActivityName="hu.bme.aut.amorg.callhierarchydemo.app.MainActi

vity„

getParentActivityIntent(): Intent, that can start the logical parent of the Activity

New Media Codec

Andriod Beam

Bluetooth support for large data

Wi-Fi P2P service discovery

RenderScript

Copy paste with Intents

TV support<uses-feature android:name="android.hardware.type.television"

android:required="true" />

70 App! Android update

Page 71: Android Native Development and extra features - AMORG

4.2 new features

DayDream

When connected to docking station or charger

Passive and active

Secondary screens

LockScreen widget

Multiple user support

Embedded fragments

Renderscript new features

Blend, Blur, Colro matrix, stb.

71 App! Android update

Page 72: Android Native Development and extra features - AMORG

4.3 new features

Bluetooth Low Energy

<uses-feature android:name="android.hardware.bluetooth_le"

android:required="true" />

Media DRM advanced features

OpenGL ES 3.0

<uses-feature android:glEsVersion="0x00030000" />

ViewOverlay support

Window attach and focus events without direct View reference

ViewTreeObserver.OnWindowAttachListener

ViewTreeObserver.OnWindowFocusChangeListener

NotificationListenerService

Automated UI testing

72 App! Android update

Page 73: Android Native Development and extra features - AMORG

Android 4.4

"It's our goal with Android KitKat to

make an amazing Android experience

available for everybody„

App! Android update73

Page 74: Android Native Development and extra features - AMORG

Android 4.4 Features

On-device profiling

Print support

IR support

SMS provider (advanced)

Total full screen

Chromium WebView

Renderscript features

RTL localization support (advanced)

74 App! Android update

Page 75: Android Native Development and extra features - AMORG

OBJECTIVES OF AN ANDROID

ARCHITECT

Page 76: Android Native Development and extra features - AMORG

The Objectives of an Android Architect

Choose proper Android version

Design application architecture (components)

Check UI design (mockup vs. specification), tablet support

Design network communication (protocol, security, etc.)

Clarify performance issues (e.g.: do we need native support?)

Check special functions and algorithm requirements

Choose proper external libraries

Design test environment

Code quality, best practices

Java, Java, Java, … (efficiently!)

Joshua Block: Effective Java

Mobile Software Development76

Page 77: Android Native Development and extra features - AMORG

Further Objectives of an Architect

Continuous Integration design and

monitoring

Use version control system properly (GIT,

SVN, etc.)

Library dependency check

Clarify license conditions

Clarify the publication mechanism of the

application

To sum up: always find the best solution!Mobile Software Development77

Page 78: Android Native Development and extra features - AMORG

Questions?

Mobile Software Development78

Page 79: Android Native Development and extra features - AMORG

Thank you!

Mobile Software Development79

E-mail:

[email protected]