@[toc] 作业
messneger
服务端
package com.example.msg_server;
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.util.Log;
public class ServerService extends Service {
private static final String TAG = "ServerService";
public ServerService() {
}
@SuppressLint("HandlerLeak")
Messenger messenger = new Messenger(new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String hellow = data.getString("hellow");
Log.i(TAG, "handleMessage: "+hellow);
//返回信息
Messenger messenger = msg.replyTo;
Message obtain = Message.obtain();
Bundle bundle = new Bundle();
bundle.putString("hi","金美丽!");
obtain.setData(bundle);
try {
messenger.send(obtain);
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
@Override
public IBinder onBind(Intent intent) {
return messenger.getBinder();
}
}
客户端
package com.example.msg_client;
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@SuppressLint("HandlerLeak")
private Messenger main = new Messenger(new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String hi = data.getString("hi");
Log.i(TAG, "handleMessage: "+hi);
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Messenger messenger = new Messenger(service);
Message obtain = Message.obtain();
obtain.replyTo = main;
Bundle bundle = new Bundle();
bundle.putString("hellow","你好!!");
obtain.setData(bundle);
try {
messenger.send(obtain);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
Intent intent = new Intent();
intent.setPackage("com.example.msg_server");
intent.setAction("com.two.oneone");
bindService(intent,connection, Service.BIND_AUTO_CREATE);
}
}
aidl
客户端
package com.example.aidl_service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
public class MyService extends Service {
public MyService() {
}
IBinder iBinder = new IMyAidlInterface.Stub() {
@Override
public int add(int a, int b) throws RemoteException {
return a+b;
}
@Override
public void callShow() throws RemoteException {
show();
}
};
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
public void show(){
Log.i("TAG", "show: 给金漂亮赐座");
}
}
客户端
package com.example.aidl_client;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.example.aidl_service.IMyAidlInterface;
public class MainActivity extends AppCompatActivity {
private ServiceConnection connection ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
//根据包名找到对应的app
intent.setPackage("com.example.aidl_service");
//通过action来找到指定的服务
intent.setAction("com.one.exe");
//连接服务
connection = new ServiceConnection() {
//重写服务中的方法
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//获取aidl接口
IMyAidlInterface iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);
try {
int add = iMyAidlInterface.add(4, 5);
Toast.makeText(MainActivity.this, add+"", Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
try {
iMyAidlInterface.callShow();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
bindService(intent,connection, Service.BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
}
}