Android-Programmering Vår 2017
Agenda Repetisjon Komponenter AndroidManifest.xml og Gradle Activity Lifecycle Intents
Applikasjonskjøring.apk - Android Pacakage Linux -> Flerbrukersystem Unik Linux brukerid Hver prosess har sin egen VM Hver app kjører i egen prosess Least Privilege Utvidede rettigheter
Repetisjon - Komponenter Activities Services Content providers Broadcast receivers Intents
Repetisjon - Komponenter Activities Services Content providers Broadcast receivers Intents
Repetisjon - Komponenter Activities Services Content providers Broadcast receivers Intents
Repetisjon - Komponenter Activities Services Content providers Broadcast receivers Intents
Repetisjon - Komponenter Activities Services Content providers Broadcast receivers Intents
Repetisjon - Komponenter Activities Services Content providers Broadcast receivers Intents
AndroidManifest.xml Obligatorisk Innholder java-package for appen package= no.hiof.larseknu.myapplication" Beskriver alle komponentene i appen <activity android:name=".mainactivity" android:label="@string/app_name"> </activity> Håndterer rettigheter <uses-permission android:name="android.permission.read_contacts"/> <uses-feature android:name="android.hardware.camera.any android:required= true /> Kan deklarere API som appen krever <uses-sdk android:minsdkversion= 16 android:targetsdkversion= 25 /> Vil bli overskrevet hvis deklarert i build.gradle (anbefalt)
Struktur <?xml version="1.0" encoding="utf-8"?> <manifest> <uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture /> <application> <activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </activity> <activity-alias> <intent-filter>... </intent-filter> <meta-data /> </activity-alias> <service> <intent-filter>... </intent-filter> <meta-data/> </service> <receiver> <intent-filter>... </intent-filter> <meta-data /> </receiver> <provider> <grant-uri-permission /> <meta-data /> <path-permission /> </provider> <uses-library /> </application> </manifest> https://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct
Elementer <action> <activity> <activity-alias> <application> <category> <data> <grant-uri-permission> <instrumentation> <intent-filter> <manifest> <meta-data> <permission> <permission-group> <permission-tree> <provider> <receiver> <service> <supports-screens> <uses-configuration> <uses-feature> <uses-library> <uses-permission> <uses-sdk> https://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct
Elementer <manifest> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="no.hiof.larseknu.playingwithandroid"> <application> <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme«> </application> https://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct
Elementer <uses-permission> <uses-permission android:name="android.permission.internet" /> <permission> <manifest... > <permission android:name="com.example.project.debit_acct"... /> <uses-permission android:name="com.example.project.debit_acct" />... <application...> <activity android:name="com.example.project.freneticactivity" android:permission="com.example.project.debit_acct"... >... </activity> </application> </manifest> <permission-group> https://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct
Elementer <activity> <provider> <receiver> <service> <manifest package="com.example.project"... > <application... > <service android:name=".secretservice"... >... </service>... </application> </manifest> https://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct
Elementer <intent-filter> <activity android:name=".mainactivity" <intent-filter> <action android:name="android.media.action.image_capture" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> https://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct
Elementer <uses-feature> <manifest... > <uses-feature android:name="android.hardware.sensor.compass" android:required="true" />... </manifest> <uses-sdk> («deprecated») <manifest... > <uses-sdk android:minsdkversion="21" android:targetsdkversion= 25" />... </manifest> https://developer.android.com/guide/topics/manifest/manifest-intro.html#filestruct
Activity Komponent som håndterer brukergrensesnitt MainActivity Back Stack LIFO Last in, first out Activity Lifecycle Callback Methods
Activity Lifecycle En activity eksisterer i hovedsakelig tre tilstander: Resumed Paused Stopped Callback Methods oncreate() onstart() onresume() onpause() onstop() ondestroy() Alle callback metoder må også kalle på superklassen sin implementasjon av metoden.
Activity Lifecycle En activity eksisterer i hovedsakelig tre tilstander: Resumed Paused Stopped Callback Methods oncreate() onstart() onresume() onpause() onstop() ondestroy() Alle callback methods må også kalle på superklassen sin implementasjon av metoden.
Intents Kommunikasjonsobjekt Tre bruksområder Starte en activity Starte en service Levere en broadcast To typer intents Explicitte Implicit
Eksplisitte Intents
Implisitte Intents
Intent objektet Inneholder ComponentName Action String-verdi Bruker ofte pakkenavn Mange innebygde Kun én action per intent Data Category Extras Key Value
Action En action beskriver hva som skal utføres Action er en string verdi Bruker ofte pakke-navn Vanlig at den inneholder «action» «no.hiof.larseknu.action.do_work» Finnes mange innebygde Intent har ikke flere enn en action Intent filter inneholder null eller flere actions
Action matching Case sensitiv sammenligning av strengene no.hiof.larseknuaction.do_work = no.hiof.larseknu.action.do_work no.hiof.larseknu.action.do_work!= no.hiof.larseknu.action.do_work Intent action må matche en action i intent filter Filter uten noen action, vil aldri matche noe intent Intent uten action-verdi, vil matche alle filtere med minst én action.
Ekstra informasjon til Intents Inneholder navn og en verdi Støtter «fornavn» -> «Lars Emil» Stringer og de fleste primitive datatyper Arrayer Java Serializable og Android Parcelable Extras blir ikke tatt med i testene
Category Category deler kvalifiserte komponenter opp i undergrupper Action er en string verdi Bruker ofte pakke-navn Vanlig og inneholde «category» «com.capgemini.category.view» Finnes mange innebygde Intent har ingen eller flere category-verdier Intent filter inneholder ingen eller flere category-verdier
Category matching Case sensitive sammenligning av strenger Alle category i intentet må være i intent filteret Intent uten category matcher alle Category kan kreves uten at den finnes i en intent CATEGORY_LAUNCHER Kreves for at appen skal launches
Data Type data Mime URI (Uniform Resource Identifier) Hvor dataen befinner seg En intent har ingen eller ett data objekt Filter har ingen eller flere data tester Kan inneholde wildcards
URI Scheme Host Port Path http://www.hiof.no:80/android
Data matching Generelle regler Mime type og URI er case-sensitive Det må finnes en forekomst av intent data i intent filter