android 4.1/4.2

77
Photo credit: Kalexanderson / Foter.com / C C BY-NC-S A Android 4.1+ @mobileLarson @_openKnowledge Lars Röwekamp | CIO New Technologies

Upload: open-knowledge-gmbh

Post on 10-May-2015

595 views

Category:

Documents


0 download

DESCRIPTION

Speaker: Lars Röwekamp MobileTechCon 13.3.2013 Spätestens seit Android 4.0 ist klar, dass iOS einen nicht mehr wegzudiskutierenden Konkurrenten bekommen hat. Ein vereinheitlichtes Entwicklungsmodell für Smartphones und Tablets sowie UI Design Guidelines für eine optimale User Experience bringen Android endgültig auf die Erfolgsspur. Doch wie geht es weiter? Bereits Jelly Bean (4.1) zeigt, dass noch lange nicht das Ende erreicht ist. Ein verbessertes Notification Framework, ein stark überarbeitetes Navigation-Konzept, Android Beam und Wi-Fi Direct sind nur einige der Highlights. Und auch Android 4.2 steht dem in puncto neuer Features in nichts nach. Die Session zeigt die besten Features der Post-4.0-Ära.

TRANSCRIPT

Page 1: Android 4.1/4.2

Ph

oto

cre

dit:

Ka

lexa

nd

ers

on

/ F

ote

r.co

m /

CC

BY

-NC

-SA

Android 4.1+ @mobileLarson @_openKnowledge

Lars Röwekamp | CIO New Technologies

Page 2: Android 4.1/4.2

Photo credit: Kalexanderson / Foter.com / CC BY-NC-SA

Agenda

NotificationsNavigationFragments

Connectivity

... and Stuff

Page 3: Android 4.1/4.2

Photo credit: Kalexanderson / Foter.com / CC BY-NC-SA

Notifications

Page 4: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Was bisher geschah ...

‣Notifications zum Informieren über Änderungen innerhalb der App‣Notification Area und Drawer als „Medium“ zur Darstellung der Änderungsinformation

Page 5: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Page 6: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Seit Jelly Bean können Notifications ...

‣... variabel in ihrer Größe sein‣... auf- und zugeklappt werden‣... verschiedene Aktionen anstoßen‣... eine Priorität besitzten

Page 7: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Basis Layout

Page 8: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Expanded Layout

‣Inbox‣BigPicture‣BigText‣Custom Layout

‣Expanded Style‣Compressed Style

Page 9: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Expanded Layout

Page 10: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Actions

Page 11: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Actions

‣Darstellung als Button‣bis zu 3 Actions direkt anzeigbar‣alternativ „more“ Icon für Overflow

‣Pending Intents zur Starten der Aktion

Page 12: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Priorities

Page 13: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Stacking

Page 14: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notification Stacking & Expanded Layout

Page 15: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

BTW: Notification Best Practices

Page 16: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

BTW: Kids, don‘t try this athome!

Page 17: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

// Intent to call if notification is selectedIntent intent = new Intent(this, MyActivity.class);PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

// Build up notification with some dummy actionsNotification notification = new Notification.Builder(this) .setContentTitle("New Message from " + "@mobileLarson") .setContentText("Hi, what‘s up?") .setSmallIcon(R.drawable.new_msg_icon) .setContentIntent(pIntent) .addAction(R.drawable.answer_icon, "Answer", pIntent) .addAction(R.drawable.more_icon, "More", pIntent).build();

// Set notification flag(s)notification.flags = Notification.FLAG_AUTO_CANCEL;

// Retrieve notification service and send notificationNotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);notificationManager.notify(0, notification);

Page 18: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

// Intent to call if notification is selectedIntent intent = new Intent(this, MyActivity.class);PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

// Build up expandable notification with some dummy actionsNotification notification = new Notification.Builder(this) .setContentTitle("New Message from " + "@mobileLarson") .setContentText("Hi, what‘s up?") .setSmallIcon(R.drawable.new_msg_icon) .setContentIntent(pIntent) .addAction(R.drawable.answer_icon, "Answer", pIntent) .addAction(R.drawable.more_icon, "More", pIntent) .setStyle(new Notification.BigTextStyle().bigText("...")) .build();

... oder BigPictureStyle bzw. InboxStyle

oder BigPictureStyle bzw. InboxStyle

Page 19: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Page 20: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Eigentlich ganz einfach, aber ...

‣... was ist mit Notification Stacking? ‣... was ist mit Abwärtskompabilität?‣... was ist mit Navigation?

Page 21: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notifications & Stacking

‣eindeutige noteID als Hinweis für den Notification Manager verwenden, dass er die selbe Notification-Darstellung nutzen soll

‣notificationManager.notify(noteID, notification)

Page 22: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notifications & Abwärtskompabilität

‣NotificationCompat‣NotificationCompat.Builder

‣Action Buttons erscheinen erst ab V4.1+

Page 23: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)    .setSmallIcon(R.drawable.notification_icon)    .setContentTitle("Event Tracker")    .setContentText("Events Received");

// Sets and configure the specific styleNotificationCompat.InboxStyle inboxStyle =        new NotificationCompat.InboxStyle();inboxStyle.setBigContentTitle("Event tracker details:") .addLine("first line") .addLine("second line") .addLine("third line") .setSummeryText("+3 more");

// Moves the big view style object into the notification object.mBuilder.setStyle(inBoxStyle);Notification notification = mBuilder.build(); ...

Page 24: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Notifications & Navigation

‣dazu gleich mehr ...

Page 25: Android 4.1/4.2

Photo credit: Kalexanderson / Foter.com / CC BY-NC-SA

Navigation

Page 26: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Was bisher geschah ...

‣Android 4.0 führt Unterscheidung zwischen „Back vs. Up“ Navigation ein

Page 27: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Back vs. Up Navigation

Page 28: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Page 29: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Page 30: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Page 31: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Page 32: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Page 33: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Deep Dive

Page 34: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); ...

}

Step 1: Enable „Up Navigation“ Step 1: Enable „Up Navigation“

Page 35: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

@Overridepublic boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) {

// app icon in action bar clicked: go home case android.R.id.home: Intent i = new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true;

default: return super.onOptionsItemSelected(item); } }

Step 2: Realize „Up Navigation“ Step 2: Realize „Up Navigation“

Page 36: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Eigentlich ganz einfach, aber ...

‣... ziemlich viel Aufwand, oder? ‣... was ist mit „deep dive“ Intents?

Page 37: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Navigation & „Deep Dive“ Intents

‣Einsprung von außen „mitten“ in die App‣Navigation Stack wird künstlich aufgebaut a.k.a. Synthetic Back Stack

‣Was ist mit dem fehlenden Kontext? „Music Details“ navigiert zurück zur „Music Liste“, aber zu welcher?

Page 38: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

Deep Dive

Page 39: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

<activity  android:name=".MainActivity"  android:label="@string/app_name" >  <intent-filter> ... </intent-filter></activity>

<activity    android:name=".ResultActivity"    android:parentActivityName=".MainActivity">    <meta-data        android:name="android.support.PARENT_ACTIVITY"        android:value=".MainActivity"/></activity>

Step 1: Enable „Up Navigation“ Step 1: Enable „Up Navigation“

Page 40: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

@Overridepublic boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) {

// app icon in action bar clicked: go home case android.R.id.home: Intent i = new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true;

default: return super.onOptionsItemSelected(item); } }

Step 2: Realize „Up Navigation“ Step 2: Realize „Up Navigation“

Page 41: Android 4.1/4.2

Navigation Android 4.1+ - Noteworthy ...

MTC2013

@Override

public void onPrepareNavigateUpTaskStack( TaskStackBuilder builder) {

// retrieve intent for manipulation int position = ...; Intent intent = builder.getIntentAt(position);

// manipulate intent intent.putExtra(INTENT_SPECIFIC_INFO, specificInfo); ...}

Step 3: Manipulate Intent Data Step 3: Manipulate Intent Data

Page 42: Android 4.1/4.2

Photo credit: Kalexanderson / Foter.com / CC BY-NC-SA

Fragments

Page 43: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Was bisher geschah ...

‣Android 4.0 führt Fragments als Konzept zur Modularisierung ein‣Wiederverwendbare Blöcke zur Gestaltung von „Multi-Pane“ Layouts

Page 44: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Page 45: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Fragments 1x1

‣UI Fragments als Building Blocks‣UI Activity Layout als Block Assembler‣UI Activity Class als Block Assembler Logic

‣UI Resources als Switch

Page 46: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Page 47: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Fragments im Detail

‣Activity Modul a.k.a. Sub Activity‣inkl. eigener UI‣inkl. eigenem Lifecycle

‣benötigt immer eine umliegende Activity‣Lifecycle passt sich dem Activity-Lifecycle an

Page 48: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Page 49: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

in Aktion ‣ Starte MainActivity‣ Screensize Smartphone‣ Orientierung Portrait

‣ Layout aus res/layout‣ Fragment A

‣ Bei Selektion schicke Intent „Details“

‣ Zeige DetailsActivity in Fragment B

1)Standardlayout

1)

Page 50: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

in Aktion

‣ Starte DetailActivity‣ Screensize Smartphone‣ Orientierung Portrait

‣ Layout aus res/layout‣ Fragment B

1)Standardlayout

1)

Page 51: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

in Aktion‣ Starte MainActivity‣ Screensize Tablet‣ Orientierung Landscape

‣ Layout aus /res/layout-sw600dp

‣ Fragment A und B

‣ Bei Selektion aktualisiere B

1)Layout für: smalest witdh 600dp = 10“ Tablet

1)

Page 52: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Fragment Main Player

‣Fragment XML‣Fragment Class

‣FragmentManager‣FragmentTransaction

Page 53: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Fragments

‣Soweit alles klar, aber wie kann ich ein Fragment innerhalb eines anderen Fragments platzieren?

Page 54: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Nested Fragments

‣Verschachtelte Fragments‣dynamisch via FragmentManager hinzufügen, aktualisieren, löschen

‣können nicht statisch via XML Layout angegeben werden!

Page 55: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

Nested Fragments

Page 56: Android 4.1/4.2

Fragments Android 4.1+ - Noteworthy ...

MTC2013

...@Overridepublic void onClick(View v) { Fragment nestedFragment = new NestedFrag(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(getId(), nestedFragment, "parent").commit();}...

Page 57: Android 4.1/4.2

Notifications Android 4.1+ - Noteworthy ...

MTC2013

Page 58: Android 4.1/4.2

Photo credit: Kalexanderson / Foter.com / CC BY-NC-SA

Connectivity

Page 59: Android 4.1/4.2

MTC2013

Was bisher geschah ...

‣Einführung vereinfachter Connectivity zwischen zwei Android Devices in Android 4.0

‣via NFC a.k.a. Android Beam ‣via WiFi a.k.a. WiFi Direct

Connectivity Android 4.1+ - Noteworthy ...

Page 60: Android 4.1/4.2

MTC2013

Android Beam

‣Datenaustausch zwischen zwei „NFC-Devices“‣Beam API liefert UI und NFC Support‣Game Score, Chat Data, Contacts, Apps ...‣Kleine Datenmengen via NFC‣Große Datenmengen via Bluetooth‣Apps via Google Play

Connectivity Android 4.1+ - Noteworthy ...

Page 61: Android 4.1/4.2

MTC2013

Android Beam Transfer für „große“ Daten

‣Transfer via Bluetooth oder Alternativen‣Transparente Verbindung im Hintergrund

‣Aktivieren via ‣setBeamPushUris oder‣NfcAdapter.CreateBeamUrisCallback

Connectivity Android 4.1+ - Noteworthy ...

„static“ content „static“ content

„dynamic“ content „dynamic“ content

Page 62: Android 4.1/4.2

MTC2013

WiFi Direct

‣P2P-Verbindung zu „Nearby-Devices“ via WiFi‣Kein Internet oder Tethering notwendig

‣WifiP2PManager als Main Player‣Peer Discovery, Request & Connecting

Connectivity Android 4.1+ - Noteworthy ...

Page 63: Android 4.1/4.2

MTC2013

WiFi Direct Service Discovery

‣Finden & Filtern von „Nearby Device“ Services ‣Basiert auf Android Network Service Discovery

‣Main Player WifiP2pManager - Service ...‣anbieten: addLocalService‣nutzen: addServiceRequest & discoverService

Connectivity Android 4.1+ - Noteworthy ...

Page 64: Android 4.1/4.2

Photo credit: Kalexanderson / Foter.com / CC BY-NC-SA

ConnectivitySome Stuff

Page 65: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

‣Developer Options‣Security Enhancements ‣Performance Improvements

Page 66: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Developer Options

‣SEVEN is the magic number‣Take Bug Report ‣Power Menu Bug Reports‣Verify App over USB‣Simulate secondary Display‣...

„7x die Builde-No anklicken,

um Dev Options zu aktivieren.“

Page 67: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Developer Options

‣SEVEN is the magic number‣Take Bug Report ‣Power Menu Bug Reports‣Verify App over USB‣Simulate secondary Display‣...

Screenshot, Device State Info Dump, eMail-Report

Page 68: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Developer Options

‣SEVEN is the magic number‣Take Bug Report ‣Power Menu Bug Reports‣Verify App over USB‣Simulate secondary Display‣...

Power Menu Option für Bug

Reports

Page 69: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Developer Options

‣SEVEN is the magic number‣Take Bug Report ‣Power Menu Bug Reports‣Verify App over USB‣Simulate secondary Display‣...

App Check für USB

ausschalten

Page 70: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Developer Options

‣SEVEN is the magic number‣Take Bug Report ‣Power Menu Bug Reports‣Verify App over USB‣Simulate secondary Display‣...

Power Menu Option für Bug

Reports

Page 71: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Security Enhancements

‣Application Verification‣Premium SMS Control‣Always-on VPN‣Improved Permission Display‣Content Provider Defaults‣...

Application Scan vor der Installation

Page 72: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Security Enhancements

‣Application Verification‣Premium SMS Control‣Always-on VPN‣Improved Permission Display‣Content Provider Defaults‣...

Notification falls

Premium SMS

Page 73: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Security Enhancements

‣Application Verification‣Premium SMS Control‣Always-on VPN‣Improved Permission Display‣Content Provider Defaults‣...

Net Traffic nur bei VPN erlaubt

Page 74: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Security Enhancements

‣Application Verification‣Premium SMS Control‣Always-on VPN‣Improved Permission Display‣Content Provider Defaults‣...

Gruppierung und

bessere Info

Page 75: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Security Enhancements

‣Application Verification‣Premium SMS Control‣Always-on VPN‣Improved Permission Display‣Content Provider Defaults‣...

NOT exported

Page 76: Android 4.1/4.2

Some Stuff Android 4.1+ - Noteworthy ...

MTC2013

Performance Improvements

‣vsync Timing‣Tripple Buffering‣Reduced Touch Latency‣CPI Input Boost ‣Optimized Drawing‣...

Deutlich verbesserte Performance

und Ergonomie

Page 77: Android 4.1/4.2

Ph

oto

cre

dit:

Ka

lexa

nd

ers

on

/ F

ote

r.co

m /

CC

BY

-NC

-SA

Android 4.1+ @mobileLarson @_openKnowledge

Lars Röwekamp | CIO New Technologies