1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// IRemoteService.aidl
package
com.example.android;
// Declare any non-default types here with import statements
/** Example service interface */
interface
IRemoteService {
/** Request the process ID of this service, to do evil things with it. */
int
getPid();
/** Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void
basicTypes(
int
anInt,
long
aLong,
boolean
aBoolean,
float
aFloat,
double
aDouble, String aString);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package
com.example.service;
import
com.example.android.IRemoteService;
import
android.app.Service;
import
android.content.Intent;
import
android.os.IBinder;
import
android.os.Process;
public
class
DDService
extends
Service {
@Override
public
void
onCreate() {
super
.onCreate();
System.out.println(
"DDService onCreate........"
+
"Thread: "
+ Thread.currentThread().getName());
}
@Override
public
IBinder onBind(Intent arg0) {
System.out.println(
"DDService onBind"
);
return
mBinder;
}
private
final
IRemoteService.Stub mBinder =
new
IRemoteService.Stub() {
public
int
getPid(){
System.out.println(
"Thread: "
+ Thread.currentThread().getName());
System.out.println(
"DDService getPid "
);
return
Process.myPid();
}
public
void
basicTypes(
int
anInt,
long
aLong,
boolean
aBoolean,
float
aFloat,
double
aDouble, String aString) {
System.out.println(
"Thread: "
+ Thread.currentThread().getName());
System.out.println(
"basicTypes aDouble: "
+ aDouble +
" anInt: "
+ anInt+
" aBoolean "
+ aBoolean+
" aString "
+ aString);
}
};
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package
com.example.aidlclient;
import
android.app.Activity;
import
android.content.ComponentName;
import
android.content.Context;
import
android.content.Intent;
import
android.content.ServiceConnection;
import
android.os.Bundle;
import
android.os.IBinder;
import
android.os.Process;
import
android.os.RemoteException;
import
android.view.View;
import
com.example.android.IRemoteService;
public
class
MainActivity
extends
Activity {
private
IRemoteService remoteService;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
ServiceConnection conn =
new
ServiceConnection() {
@Override
public
void
onServiceDisconnected(ComponentName name) {
}
@Override
public
void
onServiceConnected(ComponentName name, IBinder service) {
remoteService = IRemoteService.Stub.asInterface(service);
try
{
int
pid = remoteService.getPid();
int
currentPid = Process.myPid();
System.out.println(
"currentPID: "
+ currentPid +
" remotePID: "
+ pid);
remoteService.basicTypes(
12
,
1223
,
true
,
12
.2f,
12.3
,
"我们的爱,我明白"
);
}
catch
(RemoteException e) {
e.printStackTrace();
}
System.out.println(
"bind success! "
+ remoteService.toString());
}
};
/**
* 监听按钮点击
* @param view
*/
public
void
buttonClick(View view) {
System.out.println(
"begin bindService"
);
Intent intent =
new
Intent(
"duanqing.test.aidl"
);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
@Override
protected
void
onDestroy() {
super
.onDestroy();
unbindService(conn);
}
}
|