More On Key Android Aspects: Mobile Systems and Smartphone Security
More On Key Android Aspects: Mobile Systems and Smartphone Security
Android Aspects
Mobile Systems and Smartphone Security
(MOBISEC 2020)
Prof: Yanick Fratantonio
EURECOM 1
More info on important Android aspects
- Intents, Bundle
- PackageManager
- Native Code
2
More on Activity
- To start an activity
- startActivity(intent)
- intent can be either explicit or implicit
3
Get replies from activities
A.X B.Y
Intent i = new Intent(...);
int requestCode = 400;
startActivityForResult(i, requestCode);
onCreate() {
Intent resInt = new Intent();
...
setResult(Activity.RESULT_OK, resInt);
finish();
}
4
Get replies from activities
A.X B.Y
Intent i = new Intent(...);
int requestCode = 400;
startActivityForResult(i, requestCode);
onCreate() {
Intent resInt = new Intent();
Caller can use requestCode
to distinguish replies from ...
different requests setResult(Activity.RESULT_OK, resInt);
finish();
}
onActivityResult(int requestCode, int resultCode, Intent data) {
// check requestCode and resultCode
...
}
5
More on Service
6
Services: The Full Story
7
Background Service
8
Foreground Service
9
Bound Services (doc)
10
Three ways of implementing them
- Using a Messenger
- Quite complicated...
- Using AIDL
- Also complicated...
11
Inter-Process Services via Messengers
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SAY_HELLO:
...
}
} 12
Inter-Process Services via Messengers
13
Inter-Process Services via Messengers
14
Inter-Process Services via Messengers
15
Bound Services
16
Broadcast Intents and Receivers
17
Broadcast Receiver "registration"
18
More info on Bundles
19
More info on Bundles
- intent.putExtra("flag", "flagvalue");
- intent.putExtra("num", 42);
20
Which app can do what?
PackageManager pm = context.getPackageManager();
List<ResolveInfo> list = pm.queryIntentServices(implicitIntent, 0);
ResolveInfo serviceInfo = list.get(0); // if any
ComponentName component = new ComponentName(
serviceInfo.serviceInfo.packageName,
serviceInfo.serviceInfo.name);
21