Survey							
                            
		                
		                * Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Android Terminology
• Component: Activities, content providers, broadcast receivers, and services
that together make up an application
•
•
•
•
•
•
•
•
Activity: A single user-based task, usually, but not always, containing views
Content Provider: A component that serves data to other applications
Broadcast receiver: Component receiving notifications from other activities
Service: Background process responding local or remote application requests
View: Base class for most layout components
UI Control: textView, EditText, CheckBox, RadioButton, Spinner, etc.
Layout: Visual arrangement of containers and views
Context: Object containing the global state of an application environment
• Intent: Asynchronous launching (or communication) message
• Intent Filter: Criteria an Android device uses to find matching activities
Android Terminology (cont.)
• Preference: A key/value pair, which defines a user option
• Context Menu: A menu executing after a long click
• Long Click: Analogous to right clicks; Hold click for approximately two
seconds
• Modal: Dialog requiring a response before continuing an activity
• Localize: Separate data from an application, so changes don't require
changing source. Refer to the data by an identifier name.
• Faded Edge: An edge of a scrollable area that is faded to indicate that
more information exists
• Fragment: An independent module tightly bound to an application
• Bundle: A set of key/value data pairs for persisting an application state
Android Terminology (cont.)
• Gravity: Determine alignment of text within a view of different size.
Values can include: top, bottom, left, center, fill
• Content Provider: Wrapper for data, exposing data (SQL for
example) to multiple applications, using a standard API.
• Cursor: An object containing rows extracted from an SQL table
• Projection: The columns of an SQL table of interest
• Live Folder: Deprecated mechanism to display data on home page
– Developers now use Widgets
– Live: updates display automatically
• Widgets: Miniature icon-based application view (clock, battery
charge percent) embedded on the home screen or application
• Live Wallpaper: Dynamic interactive home screen backgrounds
Creating an Android Application
Perform the following steps
1. Create a new Android project in Eclipse with the wizard icon
2. Register activities, specify Content Providers, Services, and
security specifications in AndroidManifest.xml
3. Create localized literals in the res/values directory
4. Create other resources in various res directories
5. Create UI layouts in the res/layouts directory
6. Code the activity java class in the package folder
Step 1: Eclipse Android Project Wizard
• First Screen
– Name the project
– Use workspace or browse to a new location
• Second Screen: Pick an Android version
– The oldest version has the most compatibility
– Newer versions obviously have more features
– Some newer features are backwards compatible
• Third Screen: Pick a package name
– Example: com.acorns.lesson or com.cs415.name
• Click finish to complete the process
Android Application Project
Structure
Automatically
Generated
Files
package com.paad.helloworld;
public final class BuildConfig {
public final static boolean DEBUG = true;
}
package com.paad.helloworld;public final class R {
public static final class attr {
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
Step 2: Create the Manifest
• The new project wizard
– Automatically Creates a default AndroidManifest.xml file
– Creates a default activity in the project directory
• Alter the manifest
– Register activities with intents, permissions, content
providers, services, etc.
– There are two possibilities
 Edit the manifest directly
 Use the Manifest Editor that displays when clicking the
AndroidManifest.xml file
HelloWorld Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.paad.helloworld" android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="1" // User cannot install if less (1=default)
android:targetSdkVersion="15" /> // Verify features between min & target
<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity android:label="@string/app_name"
android:name=".MyActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Step 2: Register Activities
Definition: A focused single task
• How? Alter the manifest!
– Create additional activities
– Create and/or fragments with intents, permissions,
content providers, services, etc.
– There are two possibilities
 Edit the manifest directly
 Use the GUI that displays when clicking the
AndroidManifest.xml file
(Double click AndroidManifest.xml, click on application,
scroll down and click on add, Choose activity from the
dropdown, give it a name, and click finish to start coding)
Intent
Definition: Messages that asynchronously launch or communicate
with other applications/activities
• Android Intent Resolver
– Applications sends intents to the Android system
– The Android intent resolver searches all application intent
filters to find the most suitable matching activity
– Intents can target a single application or multiple
applications broadcast for sequential handling
• Intent Filters
– Intent fields contain criteria fields defining whether an
activity is appropriate
– Criteria fields include actions, a category, path to data,
MIME type, a handling class, and security restrictions
More Details later
Manifest Intent Filter Example
Note: An intent launches an activity
<intent-filter> The Main Entry when a user launches the application
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter><intent-filter> Launched by other applications for list access
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter><intent-filter> Launched by other applications for single item access
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
Providing Access to NotePad Data
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
• Declares legal activity operations on a note directory.
• URI, vnd.android.cursor.dir/vnd.google.note , retrieves a cursor of zero or
more items (vnd.android.cursor.dir) with note pad data (vnd.google.note).
• Legal actions: view or edit the directory of data (VIEW and EDIT ), or pick
and return a particular note (PICK).
• Activities launched without a explicit package name require the DEFAULT
category, or they will not be resolved
Another Android Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bikerolas" android:versionCode="30" android:versionName="1.2">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_LOCATION />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission. ACCESS_CELL_ID />
<application android:icon="@drawable/flingicn1"
android:label="@string/app_name" android:debuggable="false">
<activity android:name=".Fling" android:label="@string/app_name">
<intent-filter><action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
</activity>
<service android:name=".FlingService" />
<receiver android:name=".FlingServiceManager"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver></application><uses-sdk android:minSdkVersion="2"></uses-sdk>
</manifest>
Note: ACCESS_LOCATION and ACCESS_GPS were used
by earlier Android versions and are now deprecated
Localize Strings
How? Create XML files in the res/values directory
Why? Promotes Internationalize and easier maintenance
Example (Strings.xml)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MyActivity!</string>
<string name="app_name">PA4AD_Ch02_Hello_World</string>
</resources>
• Build: Android creates gen/<packageName>/R.java
automatically from the information in res/Strings.xml
• Java Access: setTitle(getText(R.string.hello));
• Manifest XML Access: android:label="@string/app_name"
Layout Example (main.xml)
How? Store xml text files in the res/layouts directory
<?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="@string/hello" />
</LinearLayout>
Notes
• fill_parent (or match_parent Android 2.0 and later) fill the
entire space of the parent layout
• Wrap_content uses as little space as needed
• LinearLayout is a vertical or horizontal list of items (like
BoxLayout in Swing)
The Java Code
package com.paad.helloworld;
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity
{
/** Called when the Activity is created or restarted. **/
@Override public void onCreate(Bundle savedState)
{
super.onCreate(savedState);
setContentView(R.layout.main);
}
}
A Bundle is a bunch of key/value pairs for Applications
to restore their state after an Android termination
Android Emulator
• Start the Emulator from Eclipse
–
–
–
–
Right click on the application
Select run as and then Android application
To debug: Select debug as and then Android Application
After the first time, just click the run icon at the top of the
Eclipse window
• Important notes
– The emulator takes quite a bit of time to launch; be patient
– Don’t shut down the emulator between application runs.
Closing leads to long start up times, and sometimes
confuses Eclipse
– Every Eclipse run reinstalls and re-launches the application
Debugging Applications
• Set debuggable="true" in the <application> tag
– This is automatic when debugging in the emulator
– Manually explicitly set preference to debug on a real device
• Eclipse views
– DDMS: Dalvik Debug Monitor Server
Simulate Event: Global Positioning Service (GPS), phone calls, Short
Message System (SMS), etc.
– Debug: Start with "Debug as"
– Execute emulator to get a terminal window and execute Linux
commands to connect to SQL, execute queries, etc.
– ADB (Android Debug Bridge): Debug on actual devices (if debugging
enabled) using Eclipse; Note: ADB is part of the SDK platform tools
• Techniques: Logcat displays console output, Trace , Breakpoints, Strict mode
Enable Device Debugging
• Eclipse: window>open perspective->other>DDMS
• Enable debugging on device
– Older devices: settings>applications>development
– Newer devices: settings>about phone> tap build # seven
times> back
Debugging Techniques
• Tracing the execution
– Start: android.os.Debug.startmethodTracing("foo");
– Stop: android.os.Debug.stopMethodTracing();
– Writes output to: foo.trace on the emulator or device
• Log class:
– Analogous to Java: System.out.println or Javascript: Console.log
– Example: Log.v("category string", "message");
• Asynchronous Alert Dialogs
AlertDialog.Builder build = new AlertDialog(context);
build.setTitle("Some Message");
AlertDialog ad = builder.create();
ad.show();
• Breakpoints: Set Eclipse breakpoint and use "Debug as" option
Strict Mode (Android 2.3 and newer)
• Report violations and IO Operations: Disk reads, disk writes, etc.
• Common options when detection occurs: Write a Log message,
display a dialog message, or crash the application
• Example
StrictMode.setVMPolicy(new StrictMode.VMPolicy.builder()
.detectDiskWrites().detectLeakedSqlLiteObjects()
.penaltyLog().penaltyDeath().build());
Note: The build retuns a ThreadPolicy object to the VM Policy builder
• Detect if in debug mode
ApplicationInfo info = getContext().getApplicationInfo();
if (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { /* code here */}