Intents 
& 
Broadcast 
Receivers 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
張明禾 
• C 
• Android 
App 
• NodeJS 
• Sencha 
Touch 
• Unity 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
AndroidManifest.xml 
<manifest 
xmlns:android=hLp://schemas.android.com/apk/res/android 
package="com.example.test" 
android:versionCode="1" 
android:versionName="1.0"> 
<uses-­‐sdk 
android:minSdkVersion="8" 
android:targetSdkVersion="17" 
/> 
<applicaUon 
android:icon="@drawable/icon"> 
<acUvity 
android:name=".FirstAcUvity" 
android:label="@string/app_name"> 
<intent-­‐filter> 
<acUon 
android:name="android.intent.acUon.MAIN" 
/> 
<category 
android:name="android.intent.category.LAUNCHER" 
/> 
</intent-­‐filter> 
</acUvity> 
</applicaUon> 
2014/9/9 
</manifest> 
Copyright 
© 
2014 
MingHo 
Chang
AndroidManifest.xml 
<applicaUon 
android:icon="@drawable/icon"> 
<acUvity 
android:name=".FirstAcUvity" 
android:label="@string/app_name"> 
<intent-­‐filter> 
<acUon 
android:name="android.intent.acUon.MAIN" 
/> 
<category 
android:name="android.intent.category.LAUNCHER" 
/> 
</intent-­‐filter> 
</acUvity> 
<acUvity 
android:name=".SecondAcUvity" 
> 
</acUvity> 
</applicaUon> 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
1st 
implementaUon 
• New 
an 
acUvity 
named 
"SecondAcUvity." 
– File 
-­‐> 
New 
-­‐> 
Other… 
-­‐> 
Android 
AcUvity 
• Check 
if 
AndroidManifest.xml 
is 
updated. 
• Put 
two 
TextViews, 
one 
EditText 
& 
two 
buLons 
named 
"Dial" 
& 
"Update" 
in 
the 
layout. 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
• startAcUvity(intent); 
– Open 
another 
acUvity 
in 
the 
same 
app. 
– Open 
another 
app 
(and 
do 
something). 
• Ex: 
Open 
browser, 
show 
map, 
take 
picture, 
call 
someone… 
• startService(intent); 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvity 
• Open 
another 
acUvity 
in 
the 
same 
app. 
Context 
context 
= 
getApplicaUonContext(); 
Intent 
i 
= 
new 
Intent(context 
, 
SecondAcUvity.class); 
i.putExtra("Name", 
"Mary"); 
startAcUvity(i); 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvity 
• Get 
data 
from 
intent. 
Bundle 
extras 
= 
getIntent().getExtras(); 
if 
(extras 
== 
null) 
{ 
return; 
} 
String 
name 
= 
extras.getString("Name"); 
if 
(name 
!= 
null) 
{ 
// 
TODO 
Change 
the 
text 
in 
the 
textview 
} 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvity 
• Open 
browser. 
Uri 
webpage 
= 
Uri.parse("hLp://www.android.com"); 
Intent 
i 
= 
new 
Intent(Intent.ACTION_VIEW, 
webpage); 
startAcUvity(i); 
• Dial 
someone’s 
number 
Uri 
number 
= 
Uri.parse("tel:12345789"); 
Intent 
i 
= 
new 
Intent(Intent.ACTION_DIAL); 
i.setData(number); 
startAcUvity(i); 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvity 
• Share 
messages 
Intent 
i 
= 
new 
Intent(Intent.ACTION_SEND); 
i.setType("text/plain"); 
i.putExtra(android.content.Intent.EXTRA_TEXT, 
"How 
are 
you?"); 
startAcUvity(i); 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
2nd 
implementaUon 
• Show 
SecondAcUvity 
with 
the 
selected 
classmate’s 
name 
and 
descripUon 
aqer 
clicking 
an 
item 
on 
the 
list. 
• Dial 
the 
number 
aqer 
clicking 
the 
buLon 
in 
SecondAcUvity. 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvityForResult 
• startAcUvityForResult(intent) 
• onAcUvityResult(requestCode, 
resultCode, 
intent) 
– requestCode 
– resultCode 
– intent 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvityForResult 
• FirstAcUvity.java 
private 
staUc 
final 
int 
REQUEST_SECOND 
= 
1; 
Intent 
i 
= 
new 
Intent(this, 
SecondAcUvity.class); 
i.putExtra("Name", 
"Mary"); 
i.putExtra("DescripUon", 
"A 
girl"); 
startAcUvityForResult(i, 
REQUEST_SECOND); 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvityForResult 
• FirstAcUvity.java 
@Override 
protected 
void 
onAcUvityResult(int 
requestCode, 
int 
resultCode, 
Intent 
data) 
{ 
if 
(resultCode 
== 
RESULT_OK 
&& 
requestCode 
== 
REQUEST_SECOND) 
{ 
if 
(data.hasExtra("Dialed")) 
{ 
String 
hasDialed 
= 
data.getExtras().getString("Dialed"); 
Toast.makeText(this, 
hasDialed, 
Toast.LENGTH_SHORT).show(); 
} 
} 
2}0 
14/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Intent 
-­‐ 
startAcUvityForResult 
• SecondAcUvity.java 
@Override 
public 
void 
finish() 
{ 
Intent 
data 
= 
new 
Intent(); 
data.putExtra("Dialed", 
"Yes"); 
setResult(RESULT_OK, 
data); 
super.finish(); 
} 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
3rd 
implementaUon 
• Send 
data(dialed 
or 
not) 
back 
to 
FirstAcUvity 
and 
toast. 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Common 
Intents 
URI 
Ac'on 
Descrip'on 
hLp(s):web_address 
ACTION_VIEW 
Open 
the 
website 
tel:phone_number 
ACTION_CALL 
Call 
the 
phone 
number 
tel:phone_number 
ACTION_DIAL 
Dial 
the 
phone 
number 
geo:laUtude,longitude 
ACTION_VIEW 
Open 
map 
MediaStore.ACTION_IMAGE_CAPTURE 
Open 
camera 
People.CONTENT_URI 
ACTION_VIEW 
Open 
contact 
list 
market:search? 
q=pname:pkg_name 
ACTION_VIEW 
Search 
in 
Google 
Play 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
– 
System 
Events 
• android.intent.acUon.______ 
– BOOT_COMPLETED 
• Requires 
android.permission.RECEIVE_BOOT_COMPLETED 
– ACTION_POWER_CONNECTED 
– ACTION_POWER_DISCONNECTED 
– BATTERY_LOW 
– BATTERY_OKAY 
• android.net.conn.CONNECTIVITY_CHANGE 
• android.provider.Telephony.SMS_RECEIVED 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
• MyReceiver.java 
public 
class 
MyReceiver 
extends 
BroadcastReceiver 
{ 
@Override 
public 
void 
onReceive(Context 
context, 
Intent 
intent) 
{ 
// 
Toast 
} 
} 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
-­‐ 
Register 
• AndroidManifest.xml 
<receiver 
android:name=”.MyReceiver" 
> 
<intent-­‐filter> 
<acUon 
android:name="android.intent.acUon.BOOT_COMPLETED" 
/> 
</intent-­‐filter> 
</receiver> 
• In 
java 
Context.registerReceiver(myReceiver, 
intentFilter); 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
4th 
implementaUon 
• Define 
a 
broadcast 
receiver 
(toast 
a 
message) 
for 
power 
connected. 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
– 
Custom 
Event 
• AndroidManifest.xml 
<receiver 
android:name=".MyReceiver" 
> 
<intent-­‐filter> 
<acUon 
android:name="com.example.test.custom_receiver" 
/> 
</intent-­‐filter> 
</receiver> 
Intent 
intent 
= 
new 
Intent(); 
intent.setAcUon("com.example.test.custom_receiver"); 
sendBroadcast(intent); 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
5th 
implementaUon 
• Toast 
"Updated." 
while 
the 
broadcast 
receiver 
gets 
custom 
event, 
clicking 
"Update" 
buLon. 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
– 
Custom 
Event 
• FirstAcUvity.java 
public 
class 
CustomReceiver 
extends 
BroadcastReceiver 
{ 
@Override 
public 
void 
onReceive(Context 
context, 
Intent 
intent) 
{ 
// 
TODO 
} 
} 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
– 
Custom 
Event 
• FirstAcUvity.java 
private 
void 
registerCustomReceiver() 
{ 
IntentFilter 
filter 
= 
new 
IntentFilter(); 
filter.addAcUon("com.example.test.custom_receiver"); 
if 
(mCustomReceiver 
== 
null) 
{ 
mCustomReceiver 
= 
new 
CustomReceiver(); 
} 
registerReceiver(mCustomReceiver, 
filter); 
} 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
– 
Custom 
Event 
• FirstAcUvity.java 
private 
CustomReceiver 
mCustomReceiver 
= 
null; 
@Override 
protected 
void 
onCreate(Bundle 
savedInstanceState) 
{ 
… 
registerCustomReceiver(); 
} 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang
Broadcast 
Receiver 
– 
Custom 
Event 
• FirstAcUvity.java 
@Override 
protected 
void 
onDestroy() 
{ 
super.onDestroy(); 
if 
(mCustomReceiver 
!= 
null) 
{ 
try 
{ 
unregisterReceiver(mCustomReceiver); 
} 
catch(ExcepUon 
e) 
{ 
e.printStackTrace(); 
} 
mCustomReceiver 
= 
null; 
} 
2014/9/9} 
Copyright 
© 
2014 
MingHo 
Chang
6th 
implementaUon 
• Update 
the 
descripUon 
in 
FirstAcUvity 
aqer 
clicking 
"Update" 
buLon 
in 
SecondAcUvity. 
• Tip: 
– Use 
listAdapter.noUfyDataSetChanged(); 
when 
data 
in 
list 
change. 
2014/9/9 
Copyright 
© 
2014 
MingHo 
Chang

Android - Intents and Broadcast Receivers

  • 1.
    Intents & Broadcast Receivers 2014/9/9 Copyright © 2014 MingHo Chang
  • 2.
    張明禾 • C • Android App • NodeJS • Sencha Touch • Unity 2014/9/9 Copyright © 2014 MingHo Chang
  • 3.
    AndroidManifest.xml <manifest xmlns:android=hLp://schemas.android.com/apk/res/android package="com.example.test" android:versionCode="1" android:versionName="1.0"> <uses-­‐sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <applicaUon android:icon="@drawable/icon"> <acUvity android:name=".FirstAcUvity" android:label="@string/app_name"> <intent-­‐filter> <acUon android:name="android.intent.acUon.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-­‐filter> </acUvity> </applicaUon> 2014/9/9 </manifest> Copyright © 2014 MingHo Chang
  • 4.
    AndroidManifest.xml <applicaUon android:icon="@drawable/icon"> <acUvity android:name=".FirstAcUvity" android:label="@string/app_name"> <intent-­‐filter> <acUon android:name="android.intent.acUon.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-­‐filter> </acUvity> <acUvity android:name=".SecondAcUvity" > </acUvity> </applicaUon> 2014/9/9 Copyright © 2014 MingHo Chang
  • 5.
    1st implementaUon •New an acUvity named "SecondAcUvity." – File -­‐> New -­‐> Other… -­‐> Android AcUvity • Check if AndroidManifest.xml is updated. • Put two TextViews, one EditText & two buLons named "Dial" & "Update" in the layout. 2014/9/9 Copyright © 2014 MingHo Chang
  • 6.
    Intent • startAcUvity(intent); – Open another acUvity in the same app. – Open another app (and do something). • Ex: Open browser, show map, take picture, call someone… • startService(intent); 2014/9/9 Copyright © 2014 MingHo Chang
  • 7.
    Intent -­‐ startAcUvity • Open another acUvity in the same app. Context context = getApplicaUonContext(); Intent i = new Intent(context , SecondAcUvity.class); i.putExtra("Name", "Mary"); startAcUvity(i); 2014/9/9 Copyright © 2014 MingHo Chang
  • 8.
    Intent -­‐ startAcUvity • Get data from intent. Bundle extras = getIntent().getExtras(); if (extras == null) { return; } String name = extras.getString("Name"); if (name != null) { // TODO Change the text in the textview } 2014/9/9 Copyright © 2014 MingHo Chang
  • 9.
    Intent -­‐ startAcUvity • Open browser. Uri webpage = Uri.parse("hLp://www.android.com"); Intent i = new Intent(Intent.ACTION_VIEW, webpage); startAcUvity(i); • Dial someone’s number Uri number = Uri.parse("tel:12345789"); Intent i = new Intent(Intent.ACTION_DIAL); i.setData(number); startAcUvity(i); 2014/9/9 Copyright © 2014 MingHo Chang
  • 10.
    Intent -­‐ startAcUvity • Share messages Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(android.content.Intent.EXTRA_TEXT, "How are you?"); startAcUvity(i); 2014/9/9 Copyright © 2014 MingHo Chang
  • 11.
    2nd implementaUon •Show SecondAcUvity with the selected classmate’s name and descripUon aqer clicking an item on the list. • Dial the number aqer clicking the buLon in SecondAcUvity. 2014/9/9 Copyright © 2014 MingHo Chang
  • 12.
    Intent -­‐ startAcUvityForResult • startAcUvityForResult(intent) • onAcUvityResult(requestCode, resultCode, intent) – requestCode – resultCode – intent 2014/9/9 Copyright © 2014 MingHo Chang
  • 13.
    Intent -­‐ startAcUvityForResult • FirstAcUvity.java private staUc final int REQUEST_SECOND = 1; Intent i = new Intent(this, SecondAcUvity.class); i.putExtra("Name", "Mary"); i.putExtra("DescripUon", "A girl"); startAcUvityForResult(i, REQUEST_SECOND); 2014/9/9 Copyright © 2014 MingHo Chang
  • 14.
    Intent -­‐ startAcUvityForResult • FirstAcUvity.java @Override protected void onAcUvityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == REQUEST_SECOND) { if (data.hasExtra("Dialed")) { String hasDialed = data.getExtras().getString("Dialed"); Toast.makeText(this, hasDialed, Toast.LENGTH_SHORT).show(); } } 2}0 14/9/9 Copyright © 2014 MingHo Chang
  • 15.
    Intent -­‐ startAcUvityForResult • SecondAcUvity.java @Override public void finish() { Intent data = new Intent(); data.putExtra("Dialed", "Yes"); setResult(RESULT_OK, data); super.finish(); } 2014/9/9 Copyright © 2014 MingHo Chang
  • 16.
    3rd implementaUon •Send data(dialed or not) back to FirstAcUvity and toast. 2014/9/9 Copyright © 2014 MingHo Chang
  • 17.
    Common Intents URI Ac'on Descrip'on hLp(s):web_address ACTION_VIEW Open the website tel:phone_number ACTION_CALL Call the phone number tel:phone_number ACTION_DIAL Dial the phone number geo:laUtude,longitude ACTION_VIEW Open map MediaStore.ACTION_IMAGE_CAPTURE Open camera People.CONTENT_URI ACTION_VIEW Open contact list market:search? q=pname:pkg_name ACTION_VIEW Search in Google Play 2014/9/9 Copyright © 2014 MingHo Chang
  • 18.
    Broadcast Receiver 2014/9/9 Copyright © 2014 MingHo Chang
  • 19.
    Broadcast Receiver – System Events • android.intent.acUon.______ – BOOT_COMPLETED • Requires android.permission.RECEIVE_BOOT_COMPLETED – ACTION_POWER_CONNECTED – ACTION_POWER_DISCONNECTED – BATTERY_LOW – BATTERY_OKAY • android.net.conn.CONNECTIVITY_CHANGE • android.provider.Telephony.SMS_RECEIVED 2014/9/9 Copyright © 2014 MingHo Chang
  • 20.
    Broadcast Receiver •MyReceiver.java public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Toast } } 2014/9/9 Copyright © 2014 MingHo Chang
  • 21.
    Broadcast Receiver -­‐ Register • AndroidManifest.xml <receiver android:name=”.MyReceiver" > <intent-­‐filter> <acUon android:name="android.intent.acUon.BOOT_COMPLETED" /> </intent-­‐filter> </receiver> • In java Context.registerReceiver(myReceiver, intentFilter); 2014/9/9 Copyright © 2014 MingHo Chang
  • 22.
    4th implementaUon •Define a broadcast receiver (toast a message) for power connected. 2014/9/9 Copyright © 2014 MingHo Chang
  • 23.
    Broadcast Receiver – Custom Event • AndroidManifest.xml <receiver android:name=".MyReceiver" > <intent-­‐filter> <acUon android:name="com.example.test.custom_receiver" /> </intent-­‐filter> </receiver> Intent intent = new Intent(); intent.setAcUon("com.example.test.custom_receiver"); sendBroadcast(intent); 2014/9/9 Copyright © 2014 MingHo Chang
  • 24.
    5th implementaUon •Toast "Updated." while the broadcast receiver gets custom event, clicking "Update" buLon. 2014/9/9 Copyright © 2014 MingHo Chang
  • 25.
    Broadcast Receiver – Custom Event • FirstAcUvity.java public class CustomReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO } } 2014/9/9 Copyright © 2014 MingHo Chang
  • 26.
    Broadcast Receiver – Custom Event • FirstAcUvity.java private void registerCustomReceiver() { IntentFilter filter = new IntentFilter(); filter.addAcUon("com.example.test.custom_receiver"); if (mCustomReceiver == null) { mCustomReceiver = new CustomReceiver(); } registerReceiver(mCustomReceiver, filter); } 2014/9/9 Copyright © 2014 MingHo Chang
  • 27.
    Broadcast Receiver – Custom Event • FirstAcUvity.java private CustomReceiver mCustomReceiver = null; @Override protected void onCreate(Bundle savedInstanceState) { … registerCustomReceiver(); } 2014/9/9 Copyright © 2014 MingHo Chang
  • 28.
    Broadcast Receiver – Custom Event • FirstAcUvity.java @Override protected void onDestroy() { super.onDestroy(); if (mCustomReceiver != null) { try { unregisterReceiver(mCustomReceiver); } catch(ExcepUon e) { e.printStackTrace(); } mCustomReceiver = null; } 2014/9/9} Copyright © 2014 MingHo Chang
  • 29.
    6th implementaUon •Update the descripUon in FirstAcUvity aqer clicking "Update" buLon in SecondAcUvity. • Tip: – Use listAdapter.noUfyDataSetChanged(); when data in list change. 2014/9/9 Copyright © 2014 MingHo Chang