博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 不同进程间的调用 AIDL 实现通讯服务
阅读量:5810 次
发布时间:2019-06-18

本文共 3086 字,大约阅读时间需要 10 分钟。

android 不同进程间的调用  AIDL 实现通讯服务
     
近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试:
过程例如以下:
1:首先在要被调用的程序里写好服务service
详细代码例如以下:
package com.jiaruihua.service.demo;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class AlipayService extends Service {	@Override	public IBinder onBind(Intent intent) {		// TODO Auto-generated method stub				System.out.println("远程服务已绑定");		//注意此处要返回我们的IBinder		return new MyBinder();	}	@Override	public boolean onUnbind(Intent intent) {		// TODO Auto-generated method stub		System.out.println("远程服务已解除");		return super.onUnbind(intent);	}	@Override	public void onCreate() {		// TODO Auto-generated method stub		System.out.println("远程服务已创建");		super.onCreate();	}		@Override	public void onDestroy() {		// TODO Auto-generated method stub		System.out.println("远程服务已销毁");		super.onDestroy();	}	/*
*此处是远程所要调用的方法,功能处理在此处	 * 支付操作	 */	public void payMoney(){				System.out.println("支付操作");			}	/*
*此处须要一个Iservice.Stub,这是我们定义的Iservice.aidl,所实现的,见第二步	 * Iservice.Stub 已经实现Binder 	 */	public class MyBinder extends Iservice.Stub{		@Override		public void callMethodService() {			payMoney();					}			}}
2:创建上一步中须要一个Iservice.aidl文件
代码例如以下:
package com.jiaruihua.service.demo;//aidl 接口定义不须要訪问修饰符 默认公共interface Iservice {void callMethodService();}
eclipse中的gen文件夹中会自己主动创建 Iservice.java文件
3:在mainfest.xml文件里注冊Iservice
4:在另外一个须要调用的程序中创建一个包,注意此处的包名要和 上面mainfest.xml中service的指定包名一致;
让后将上面第二步创建的Iservice.aidl文件拷贝过来
5:调用远程服务
package com.example.mygameapp;import com.jiaruihua.service.demo.Iservice;import android.app.Activity;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity {	private Intent intent;	private Iservice iservice;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		intent = new Intent();		// 此处的action 必须和你在调用的程序里设置的action 一至		intent.setAction("com.jiaruihua.ServicePay");		// 绑定服务		findViewById(R.id.banding).setOnClickListener(new OnClickListener() {			@Override			public void onClick(View arg0) {				// 绑定服务 开启服务				bindService(intent, new MyConn(), BIND_AUTO_CREATE);			}		});		// 调用远程方法		findViewById(R.id.callmethod).setOnClickListener(new OnClickListener() {			@Override			public void onClick(View arg0) {				// TODO Auto-generated method stub				try {					iservice.callMethodService();				} catch (RemoteException e) {					// TODO Auto-generated catch block					e.printStackTrace();				}			}		});	}	private class MyConn implements ServiceConnection {		// 成功绑定		@Override		public void onServiceConnected(ComponentName name, IBinder service) {			// 将sercicse 转换成Iservice接口类型			iservice = Iservice.Stub.asInterface(service);		}		@Override		public void onServiceDisconnected(ComponentName name) {			// TODO Auto-generated method stub		}	}}
你可能感兴趣的文章
数据库三范式是什么?
查看>>
[转载]设置Ubuntu自动连接无线,无须再输入密钥环和无线密码
查看>>
九叔Xen App测试报告
查看>>
Apache配置
查看>>
Ext gridPanel 单元格数据的渲染
查看>>
Android SDK 的下载代理
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
LNMP一键安装
查看>>
SQL Server数据库概述
查看>>
Linux 目录结构及内容详解
查看>>
startx命令--Linux命令应用大词典729个命令解读
查看>>
华为3026c交换机配置tftp备份命令
查看>>
Oracle命令导入dmp文件
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
Http、TCP/IP协议与Socket之间的区别(转载)
查看>>
解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790
查看>>
.net excel利用NPOI导入oracle
查看>>
vrpie在Visio Studio 中无法调试的问题
查看>>