L05 - Android Intent and Menu ITP4501 2019
L05 - Android Intent and Menu ITP4501 2019
• For long running tasks, it’s better to use a service that talks to
this activity.
Android Intent and Menus 2
Activities and Intents
• Activities are independent of each other; however
they usually cooperate exchanging data and actions.
• Typically, one (main) activity that should be
presented to the user when the application is
launched.
• Moving from one activity to another is by executing
an intent.
• An intent is an abstract description of an operation
to be performed.
Intent: { action + data }
Main Sub-
Activity activity1
Optional Results
Android Intent and Menus 3
Invoking Activities
• There are 3 ways to invoke an activity:
1. startActivity(intent)
launches an Activity
We will focus on this method
2. sendBroadcast(intent)
sends an intent to any interested
BroadcastReceiver components
3. startService(intent) or bindService(intent, …)
communicate with a background Service.
Android Intent and Menus 4
Invoking Activities
• The main arguments of an Intent are:
1. Action The built-in action to be performed,
such as ACTION_VIEW, ACTION_EDIT,
ACTION_MAIN, …or user-created-action
2. Data The primary data to operate on,
such as a person record in the contacts
database (expressed as a Uri).
Built-in or user-
Primary data (as an URI)
created Action
tel://
http://
sendto://
"google.streetview:cbll=22.3432,114.1068&cbp=1,200,,0,1"));
startActivity(intent);
Note: The 3 contacts (Eddie, Kenny and Nancy) should be added to the
emulator before running the above code.
Android Intent and Menus 14
Using Standard Actions
• Edit the second contact
intent = new Intent(Intent.ACTION_EDIT,
Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI
+ "/" + 2));
startActivity(intent);
<Button android:id="@+id/CallBrowser" a
ndroid:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Call Browser"
android:onClick="callIntent"></Button>
<Button android:id="@+id/CallSomeone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Call Someone"
android:width="100px" android:onClick="callIntent"></Button>
<Button android:id="@+id/Dial" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Dial"
android:width="100px" android:onClick="callIntent"></Button>
<Button android:id="@+id/SearchOnMap"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Search On Map"
android:width="100px" android:onClick="callIntent"></Button>
<Button android:id="@+id/StreetView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Street View"
android:width="100px" android:onClick="callIntent"></Button>
. . . . . . Others are skipped
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:screenOrientation="portrait"
android:name=".StandardIntentExample"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER”/>
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
</manifest>
Android Intent and Menus 18
StandardIntentExample.java (callIntent Method)
public void callIntent(View view) {
Intent intent = null;
switch (view.getId()) {
case R.id.CallBrowser:
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.vtc.edu.hk"));
startActivity(intent);
break;
case R.id.CallSomeone:
intent = new Intent(Intent.ACTION_CALL,
Uri.parse("tel:12345678"));
startActivity(intent);
break;
case R.id.TakePicture:
intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
break;
default:
break;
}
}
startActivityForResult()
onActivityResult()
requestCodeID
resultCode
optional data
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
label1 = findViewById(R.id.label1);
text1 = findViewById(R.id.text1);
}
Activity 1 Activity 2
v1 = i.getXXXExtra(“key1”)
v2 = i.getXXXExtra(“key2”)
i1.putExtra(“key1”, value1)
i1.putExtra(“key2”, value2)
startActivityForResult()
i2.putExtra(“r1”, value3)
i2.putExtra(“r2”, value4)
onActivityResult()
setResult()
v1 = i.getXXXExtra(“r1”)
v2 = i.getXXXExtra(“r2”)
Android Intent and Menus 29
Example - IntentData
1. Activity1 passes two data - ("Value1", "Value one from
Activity1“) and ("Value2", "Value two from Activity1") to
Activity2.
2. Activity2 returns a string data ("returnKey1", "Swinging
on a star.") to Activity1 .
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="First value from Activity1"></TextView>
<EditText android:id="@+id/EditText01"
android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Second Value from Activity1"></TextView>
<EditText android:id="@+id/EditText02"
android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
<Button android:id="@+id/Button01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:onClick="onClick"
android:text="Finish this activity"></Button>
</LinearLayout>
@Override
public void finish() {
Intent data = new Intent();
data.putExtra("returnKey1", "Swinging on a star. ");
setResult(RESULT_OK, data);
super.finish();
}
}
Android Intent and Menus 35
Menus
• Menus are an important part of an activity's user
interface, which provide users a familiar way to
perform actions.
Menu button
• When the user selects a menu item from the Options, the
system calls your activity's onOptionsItemSelected()
method.
<EditText
android:id="@+id/etMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:inputType="text"
android:text="@string/hello" />
</LinearLayout>
import android.support.v7.app.ActionBarActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
EditText etMessage;
Integer[] ayPointSize = {10, 20, 30, 40, 50};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etMessage = (EditText)findViewById(R.id.etMessage);
}
if(menuItemId <= 5)
etMessage.setTextSize(ayPointSize[menuItemId -1]);
else {
if (menuItemId == 6)
etMessage.setTextColor(Color.RED);
else if (menuItemId == 7)
etMessage.setTextColor(Color.GREEN);
else if(menuItemId == 8)
etMessage.setTextColor(Color.BLUE);
}
return false;
}
}
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
EditText etMessage;
Integer[] ayPointSize = {10, 20, 30, 40, 50};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etMessage = (EditText)findViewById(R.id.etMessage);
registerForContextMenu(etMessage);
}
Android Intent and Menus 46
Context Menu
MenuExample.java
...
if(menuItemId <= 5)
etMessage.setTextSize(ayPointSize[menuItemId -1]);
else {
if (menuItemId == 6)
etMessage.setTextColor(Color.RED);
else if (menuItemId == 7)
etMessage.setTextColor(Color.GREEN);
else if(menuItemId == 8)
etMessage.setTextColor(Color.BLUE);
else if(menuItemId == 9)
etMessage.setTypeface(Typeface.DEFAULT, 0);
else if(menuItemId == 10)
etMessage.setTypeface(Typeface.DEFAULT, 1);
else if(menuItemId == 11)
etMessage.setTypeface(Typeface.DEFAULT, 2);
}
return false;
}
return super.onCreateOptionsMenu(menu);
}
if(menuItemId < 5)
etMessage.setTextSize(ayPointSize[menuItemId -1]);
else if(menuItemId == 5)
etMessage.setText("You have selected: \n" + item.getTitle());
else if (menuItemId == 6)
etMessage.setTextColor(Color.RED);
else if (menuItemId == 7)
etMessage.setTextColor(Color.GREEN);
else if(menuItemId == 8)
etMessage.setTextColor(Color.BLUE);
else if(menuItemId == 9)
etMessage.setTypeface(Typeface.DEFAULT, 0);
else if(menuItemId == 10)
etMessage.setTypeface(Typeface.DEFAULT, 1);
else if(menuItemId == 11)
etMessage.setTypeface(Typeface.DEFAULT, 2);
return false;
}
<item android:id="@+id/memuItem1"
android:title="Menu Item1"
android:icon="@drawable/emo_im_happy" />
<item android:id="@+id/menuItem2"
android:title="Menu Item2"
android:icon="@drawable/emo_im_sad" >
<!-- submenu -->
<menu>
<item android:id="@+id/subMenuItem1"
android:title="Sub-menu Item1" />
<item android:id="@+id/subMenuItem2"
android:title="Sub-menu Item2" />
</menu>
</item>
</menu>