android-service3
来源:互联网 发布:wow7.3mac系统 编辑:程序博客网 时间:2024/05/16 17:25
通过 Messenger实现service,可以实现两个进程直接通信。
一.创建 Service
public class MyService_message extends Service{
public static final int MSGID=1;
/** * 用于接收从客户端传递过来的数据 */private class ServiceMessage extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSGID: Log.e("MyService_message","服务器接收客户端的消息"); Messenger messenger=msg.replyTo; try { messenger.send(Message.obtain(null,10,"服务器回传的数据10")); } catch (RemoteException e) { } break; default: super.handleMessage(msg); } }}final Messenger msg=new Messenger(new ServiceMessage());@Overridepublic IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. // throw new UnsupportedOperationException("Not yet implemented"); Log.e("MyService_message","onBind"); return msg.getBinder();}}二.配置service<service android:name=".Service.MyService_message" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.administrator.servicetest.Service.MyService_message.action"></action> </intent-filter></service>三.创建客户端
1.开始service
connection=new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.e(TAG,"onServiceConnected"); msg=new Messenger(service);//获取服务器的 Messenger 对象 } @Override public void onServiceDisconnected(ComponentName name) { Log.e(TAG,"onServiceDisconnected"); msg=null; }};
//--------------------隐式调用------------------------------
Intent intent=new Intent(); intent.setAction("com.example.administrator.servicetest.Service.MyService_message.action");//android 5.0之后不支持直接隐式调用需要加下面这一行,或者把隐式转换成显示intent.setPackage(context.getPackageName());
//--------------------------------------------------//-----------------------把隐式转显示-----------------------------------Intent intent=new Intent(); intent.setAction("com.example.administrator.servicetest.Service.MyService_message.action");intent=getExplicitIntent(context,intent);
//-----------------------------------------------------------context.bindService(intent,connection ,Service.BIND_AUTO_CREATE);2.停止servicecontext.unbindService(connection);
3.给服务器发送消息进行通信
Message mess=new Message(); mess.what=MyService_message.MSGID; mess.replyTo=messenger; msg.send(mess);private Messenger messenger=new Messenger(new receive());private class receive extends Handler{ @Override public void handleMessage(Message msg) { // super.handleMessage(msg); switch (msg.what){ case 10: Log.e(TAG,"客户端接收服务器的数据:"+msg.obj); break; } }}
public static Intent getExplicitIntent(Context context, Intent implicitIntent) { // Retrieve all services that can match the given intent PackageManager pm = context.getPackageManager(); List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0); // Make sure only one match was found if (resolveInfo == null || resolveInfo.size() != 1) { return null; } // Get component info and create ComponentName ResolveInfo serviceInfo = resolveInfo.get(0); String packageName = serviceInfo.serviceInfo.packageName; String className = serviceInfo.serviceInfo.name; ComponentName component = new ComponentName(packageName, className); // Create a new intent. Use the old one for extras and such reuse Intent explicitIntent = new Intent(implicitIntent); // Set the component to be explicit explicitIntent.setComponent(component); return explicitIntent;}
}
0 0
- android-service3
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- STL中traits编程技法
- C++入门①:预备知识
- 在centos上部署java WEB环境
- 软件测试笔记(一)
- squid缓存的初搭建
- android-service3
- Vector和ArrayList的比较
- 函数的参数(一)
- 前端刷题笔记
- java 中的求最大公约数和最小公倍数的代码
- JavaScript 特效之四大家族(offset/scroll/client/event)
- 从 http 升级到 https 过程中遇到的一些问题
- 创建自己的开源项目3-将远程代码仓库下载,并创建本地代码仓库(myeclipse + github)
- 是时候给你的微信公众号请一位专属客服了