Lecture 11 - Android ICC model 2

tibburfrogtownΚινητά – Ασύρματες Τεχνολογίες

14 Δεκ 2013 (πριν από 3 χρόνια και 10 μήνες)

111 εμφανίσεις

Android ICC 2
Giovanni Russello
g.russello@auckland.ac.nz

Broadcast Receivers
• BRs are app components to receive intents
sent from system and/or other apps
• A BR has to register with the Activity
Manager and Package Manager
• Registration can be done through
– The manifest file
– Programmatically
BR registration within Manifest
<receiver android:name=''MsgListener'' >
<intent-filter>
<action
android:name=''pacman.intent.action.BROADCAST''
/>
</intent-filter>
</receiver>
BR registration within Manifest
<receiver android:name=''MsgListener'' >
<intent-filter>
<action
android:name=''pacman.intent.action.BROADCAST''
/>
</intent-filter>
</receiver>
Class responsible for processing the Intent
BR registration within Manifest
<receiver android:name=''MsgListener'' >
<intent-filter>
<action
android:name=''pacman.intent.action.BROADCAST''
/>
</intent-filter>
</receiver>
Filter to specify what intents to receive
BR program. registration
IntentFilter filter = new IntentFilter();
filter.addAction(``pacman.intent.action.BROADCAST’’);
receiver = new BroadcastReceiver() f
//@Override public void onReceive(Context context, Intent
intent)
{
System.out.println(``message receivednn'');
}
};
registerReceiver(receiver, filter);
BR program. registration
IntentFilter filter = new IntentFilter();
filter.addAction(``pacman.intent.action.BROADCAST’’);
receiver = new BroadcastReceiver() f
//@Override public void onReceive(Context context, Intent
intent)
{
System.out.println(``message receivednn'');
}
};
registerReceiver(receiver, filter);
Filter to specify what intents to receive
BR program. registration
IntentFilter filter = new IntentFilter();
filter.addAction(``pacman.intent.action.BROADCAST’’);
receiver = new BroadcastReceiver() f
//@Override public void onReceive(Context context, Intent
intent)
{
System.out.println(``message receivednn'');
}
};
registerReceiver(receiver, filter);
Action performed when the intent is received
BR program. registration
IntentFilter filter = new IntentFilter();
filter.addAction(``pacman.intent.action.BROADCAST’’);
receiver = new BroadcastReceiver() f
//@Override public void onReceive(Context context, Intent
intent)
{
System.out.println(``message receivednn'');
}
};
registerReceiver(receiver, filter);
Registration of the BR and filter
Registering BRs
• When BRs are registered programmatically
generate
REGISTER_RECEIVER_TRANSACTION
ioctl to AM via Binder
• Registration through manifest does not generate
any transactions
Broadcasting Intents
• To broadcast an intent the sendBroadcast API
should be used
• Generates a BROADCAST_INTENT_TRANSACTION
ioctl to AM through the Binder

Intent intent = new
Intent(``pacman.intent.action.BROADCAST'');
intent.putExtra(``message'',''Wake up.'');
sendBroadcast(intent);
Content Providers
• CPs are the components in an app responsible for
storing data
• CPs must be declared in the manifest file using the
<provider> tag
• CPs are accessed by URI:
– content://<authority>/<resource>

Content Providers
• Access to a CP is handled by the AM
• Ioctl with GET_CONTENT_PROVIDER_TRANSACTION
– Specifying the authority
• The AM finds the suitable CP and sends back a
handler to communicate directly with the CP
• Then the app can send URI along with the
requested operations:
– QUERY_T, GET_TYPE_T, INSERT_T, DELETE_T, UPDATE_T,
BULK_INSERT_T, OPEN_FILE_T, OPEN_ASSET_FILE_T
Service Manager
• The Service Manager is a special system service to
keep track of the services available in a device
• An app that wants to provider a service to others
can publish its service through the SM
• Communication to SM is done through Binder
SM Commands
• The SM accepts the following commands:
– publish: takes two arguments – service name and
address. This is used for publishing a service within the
SM
– get/check: take one argument – service name. The SM
returns a address of the service in the form of a
handler
– list: this lists the service names registered with the SM
SM in action
SM ioctl
ioctl on /dev/binder with BINDER_WRITE_READ
cmd:BC_TRANSACTION:
target name = android.os.IServiceManager
code = SVC_MGR_GET_SERVICE
service name = isms

Final Remarks
• Android ICC is very powerful and flexible
• High-level API for dynamic interaction between
apps
– Discovery of functionality on the fly!
• If not protected properly it can lead to serious
consequences
• Do you want to know more? See you next week!
Have a nice break