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
Manifest File, Intents, and
Multiple Activities
Manifest File
Manifest file
• AndroidManifest.xml
– required
– indicates application information
•
•
•
•
•
activities (within application tag)
Android SDK version
activities used within the app
services that will be used (Web, phone, etc.)
other aspects
Manifest file – Application tag
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="edu.csci153.MultActivities"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="Screen2"
android:label="Second Screen" >
</activity>
</application>
Manifest File
• Exploring the <application> tag
– android:allowBackup=“true”
• allows app and data to be backed up with a system
restore
– android:icon=“@drawable/ic_launcher”
• Icon to display in the drawer
– android:label="@string/app_name“
• Name of the icon in the drawer
– <activity>
• child of <application>
Manifest File
• Exploring the <activity> tag
– android:name=“edu.csci153.MultActivities”
• Associated .java file
– android:label=“@string/app_name”
• Text that appears in title bar when this activity is
displayed
– <intent-filter>
• child of <activity>
Manifest File
• Exploring the <intent-filter> tag
– <action android:name="android.intent.action.MAIN" />
• Indicates this is the main entry point of the application
– <category
android:name="android.intent.category.LAUNCHER" />
• Indicates that the activity should be launched
– Without these lines, the application is started but no
activity is presented
• intent-filters ‘filter’ what an object can do – if there is no
action defined within the filter, they implicitly deny that the
action can be performed
Intents
Intent
• Class within Android
– android.content.Intent
– contains information regarding some action to be
performed
•
•
•
•
starting the phone dialer
starting an activity
opening a web page
other
Intent Example
• Starting the phone dialer (no special permission
needed)
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:5551234"));
startActivity(intent);
Intent Example
• Opening a web page
– Permission in manifest file
• well over 100 different permissions
– access internet, bluetooth, vibrate phone, change wall paper, etc.
– http://developer.android.com/reference/android/Manifest.permission.html
• uses-permission tag (child of manifest tag)
<uses-permission android:name="android.permission.INTERNET" />
– Intent in corresponding java file
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(”http://www.google.com”));
startActivity(intent);
Intent Example
• Opening an Activity
Intent intent = new Intent(this, Screen2.class);
startActivity(intent);
• ‘this’ refers to the current activity
• Screen2.class refers to the class file associated with the
new activity to be opened
– implies a corresponding Sreen2.java file exists
– activity MUST be referenced in the manifest file
Intents
• Methods in the Intent class
– The intent class has many methods to put or
retrieve data
• useful when one Activity launches another
– put methods used by current Activity that will
instantiate another Activity
– get methods used by new instantiated Activity
Intents
• put… methods
– put… allows information to be passed from
current Activity to newly instantiated Activity
• putExtra – simple data types and arrays
» passing an integer
• i.putExtra(“Key1”, 17);
• Key1 – name of the integer to be passed
• 17 – contents of the integer to be passed
» passing a String
• i.putExtra(“Key2”, “Value”);
» passing an array
• i.putExtra(“Key3”, new int [] {1, 2, 3});
Intents
• get… methods
– get… allows information to be retrieved by the newly
instantiated Activity
• get…Extra – datatype must be known
– getting an integer
» getIntent().getIntExtra(“Key1”, 0);
» 2nd argument is default value in case Key1 does not exist, or
is not an integer
– getIntent().getStringExtra(“Key2”);
» retrieves value associated with Key2
» if no value, null is returned – no default option
– getting an array
» int [] z = getIntent().getIntArrayExtra(”Key3");
» if no value, null is returned – no default option
Activities
• Helpful hints about Activities
– Each Activity has:
• a corresponding .java file
• at least one corresponding .xml file (may have additional
menu file)
– Each Activity must be referenced in the manifest file
– The Activity class has a getIntent() method to retrieve
the intent that initiated it
– Each activity has a lifecycle
• http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
Activity lifecycle methods
• Most important (signatures)
– protected void onCreate(Bundle savedInstanceState);
• called when created or phone rotated
– protected void onPause();
• called when still visible but focus is lost
– protected void onResume();
• called when focus is set AFTER being completely obscured
• When overriding methods, super class’ version
MUST be called
Example method
@Override
protected void onResume() {
super.onResume();
//Code goes here
//Clear fields, set focus, restart sensor
//listeners, etc.
}
Additional information
• Sending information back
– When one Activity finishes, activity can be sent
back to the Activity that started it as follows:
• In the original Activity, 2 methods are needed
– startActivityForResult (Intent data, int requestCode); must be
called to open Activity
» any non-negative integer can be used for requestCode
– onActivityResult(int requestCode, int resultCode, Intent data)
must be implemented
» Called when other Activity exits – just before onResume()
• requestCode is same code from above
• resultCode is sent from closing Activity
• data stores any data that was sent back
Additional information
• Continued from previous slide
– In the opened Activity, 1 method is needed
• setResult(int resultCode, Intent data) must be called
prior to finish()
– any integer can be used for resultCode
» Activity.RESULT_CANCELED
» Activity.RESULT_OK
» other
– data stores any data to be sent back
Sample Code
• In original Activity
public void openActivityAndWaitForResults() {
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("StringValue", "Coming to you");
startActivityForResult(i, 1);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Toast.makeText(this, "From second activity: " + requestCode + " " + resultCode + " " +
data.getStringExtra("InfoBack"), Toast.LENGTH_LONG).show();
}
• In opened Activity
public void closeActivityAndSendInfoBack () {
Intent output = new Intent();
output.putExtra("InfoBack", "Back at you!");
setResult(7, output);
finish();
}