<service android:name=".CustomService" android:process=":remote"/>
public class CustomService extends Service{
static final int MSG_SAY_HELLO = 1;
//实现一个能够处理接收信息的Handler
class IncomingHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case MSG_SAY_HELLO:
Toast.makeText(getApplicationContext(),"hello!",Toast.LENGTH_SHORT).show();
break;
default:
super.handleMessage(msg);
}
}
}
//被客户端接收的Messenger对象
final Messenger messenger = new Messenger(new IncomingHandler());
@Override
public IBinder onBind(Intent intent) {
Toast.makeText(getApplicationContext(),"binding!",Toast.LENGTH_SHORT).show();
return messenger.getBinder();
}
}
public class MainActivity extends AppCompatActivity {
private Button mBtStart;
private Messenger messenger = null;
private boolean mBound;
private TextView mTvMsg;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
messenger = new Messenger(service);
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
messenger = null;
mBound = false;
}
};
public void sayHello(View v){
if(!mBound) return;
Message msg = Message.obtain(null,CustomService.MSG_SAY_HELLO,0,0);
try{
messenger.send(msg);
}catch (RemoteException e){
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtStart = (Button) findViewById(R.id.bt_start);
mTvMsg = (TextView) findViewById(R.id.tv_msg);
mBtStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,CustomService.class);
bindService(new Intent(MainActivity.this,CustomService.class),serviceConnection, Context.BIND_AUTO_CREATE);
}
});
}
@Override
protected void onStop() {
super.onStop();
// Unbind from the service
if (mBound) {
unbindService(serviceConnection);
mBound = false;
}
}
}
clientMessenger = msg.replyTo;//这个Message是在客户端中创建的
if(clientMessenger!=null){
Message msgToClient = Message.obtain();
msgToClient.what = SEND_MESSAGE_CODE;
Bundle bundle = new Bundle();
bundle.putString("msg","客户端,我接收到你的消息了,这是我回应给你的,看到了吗?");
msgToClient.setData(bundle);
try {
clientMessenger.send(msgToClient);
} catch (RemoteException e) {
e.printStackTrace();
}
}
public class MyService extends Service {
private static final int RECEIVE_MESSAGE_CODE = 0x0001;
private static final int SEND_MESSAGE_CODE = 0x0002;
private Messenger clientMessenger = null;
private Messenger serviceMessenger = new Messenger(new ServiceHandler());
@Override
public IBinder onBind(Intent intent) {
return serviceMessenger.getBinder();
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
clientMessenger = null;
}
private class ServiceHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == RECEIVE_MESSAGE_CODE){
Bundle data = msg.getData();
if(data != null){
String str = data.getString("msg");
Toast.makeText(getApplicationContext(),"Service:I received the message:"+str,Toast.LENGTH_SHORT).show();
}
clientMessenger = msg.replyTo;//这个Message是在客户端中创建的
if(clientMessenger!=null){
Message msgToClient = Message.obtain();
msgToClient.what = SEND_MESSAGE_CODE;
Bundle bundle = new Bundle();
bundle.putString("msg","客户端,我接收到你的消息了,这是我回应给你的,看到了吗?");
msgToClient.setData(bundle);
try {
clientMessenger.send(msgToClient);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
}
}
public class MainActivity extends AppCompatActivity{
private Button mBtBind;
private Button mBtUnBind;
private TextView mTvMsg;
private static final int SEND_MESSAGE_CODE = 0x0001;
private static final int RECEIVE_MESSAGE_CODE = 0x0002;
private boolean isBound = false;
private String SERVICE_ACTION = "com.example.serviceapp.MyService";
private Messenger serviceMessenger = null;
private Messenger clientMessenger = new Messenger(new ClientHandler());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtBind = (Button) findViewById(R.id.bt_bind);
mBtUnBind = (Button) findViewById(R.id.bt_unbind);
mTvMsg = (TextView) findViewById(R.id.tv_msg);
mBtUnBind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isBound){
unbindService(serviceConnection);
}
}
});
mBtBind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!isBound){
Intent intent = new Intent();
intent.setAction(SERVICE_ACTION);
intent.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager pm = getPackageManager();
ResolveInfo info = pm.resolveService(intent,0);
if(info != null){
String packageName = info.serviceInfo.packageName;
String serviceName = info.serviceInfo.name;
ComponentName componentName = new ComponentName(packageName,serviceName);
intent.setComponent(componentName);
bindService(intent,serviceConnection,BIND_AUTO_CREATE);
}
}
}
});
}
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
serviceMessenger = new Messenger(service);
isBound = true;
Message msg = Message.obtain();
msg.what = SEND_MESSAGE_CODE;
Bundle data = new Bundle();
data.putString("msg","你好,MyService,我是客户端");
msg.setData(data);
msg.replyTo = clientMessenger;
try {
serviceMessenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
serviceMessenger = null;
isBound = false;
}
};
private class ClientHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == RECEIVE_MESSAGE_CODE){
Bundle data = msg.getData();
if(data != null){
String str = data.getString("msg");
mTvMsg.setText(str);
}
}
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有