Manifest File, Intents, and Multiple Activities. Manifest File.

21
Manifest File, Intents, and Multiple Activities

Transcript of Manifest File, Intents, and Multiple Activities. Manifest File.

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();

}