Open Intents - Android Intents Mechanism and Dependency Management
Manifest File, Intents, and Multiple Activities
description
Transcript of Manifest File, Intents, and Multiple Activities
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 Activitypublic void closeActivityAndSendInfoBack () {
Intent output = new Intent();output.putExtra("InfoBack", "Back at you!");setResult(7, output);finish();
}