Android AIDL的入门使用教程

最近博主在做一个项目要求用到AIDL调用,于是研究了半天终于弄明白了,在这里给入门的同学说一下:


首先,在eclipse下新建两个工程 工程1 和 工程2 

我们把工程1作为被调用的工程,工程2作为主调工程.


上图是项1的树形图。
包里有一个AIDL文件。。
这就是接口文件,在里面定义了接口。
然后通过Android的Service实现了里面的接口。
MyAIDL.aidl文件内容如下,语法跟java类似,里面只定义了一个接口
interface MyAIDL{
    void print(in String str);
}
 

MyAILDService.java文件内容如下:注意观察是怎么跟aidl文件建立联系的。另一个activity文件不用管他。。

package uestc.muhuan;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;

public class MyAIDLService extends Service {

private MyAIDL.Stub mBind = new MyAIDL.Stub() {

@Override
public void print(String str) throws RemoteException {
// TODO Auto-generated method stub
	System.out.println(str);

     }
   };

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
	return mBind;
   }

}



最后比比较重要的一点就是在项目1的Manifest文件中要注册你的service,同时要为你的sevice加上一个action标记。
如下所示:
     <service
            android:name=".MyAIDLService"
    	    android:process=":remote"       //这一行网上说远程调用必须得有,但是本人测试发现                                  //有可无,只是在有这一句的时候,系统会多出一个remote进程,但是不影响                            // 功能,水平有限,不知何故。
            >
              
            <intent-filter >
                <action android:name="uestc.muhuan.service_action" >
                </action>
            </intent-filter>
        </service>

到此为止,项目1完工了,把这个工程烧到你的手机,或者模拟器上。

下面这部分是项目2:

上图是项目2的树形图,注意看在项目2里有一个跟项目1一样的包,包里同样有一个AIDL文件,这个文件跟项目1 的文件是一模一样的 直接拖过来就好了。。但是注意这里面没有Service实现文件。。
MyAIDLTest2Activity.java 的代码如下

package uestc.muhua;

import uestc.muhuan.MyAIDL;
import uestc.muhua.R;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;

public class MyAIDLTest2Activity extends Activity {
private MyAIDL myAIDL = null;

ServiceConnection sConnection = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub

   }

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
	myAIDL = MyAIDL.Stub.asInterface(service);
  try {
	myAIDL.print("nihao2");
  } catch (RemoteException e) {
// TODO Auto-generated catch block
	e.printStackTrace();
      }
    }
  };

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	System.out.println("2qidong");
	setContentView(R.layout.main);
	init();
  }

private void init() {
	this.bindService(new Intent("uestc.muhuan.service_action"),
	sConnection, BIND_AUTO_CREATE);
  }
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
	this.unbindService(sConnection);
	super.onDestroy();
   }
}

其实很简单,就是通过ServiceConnect绑定服务,然后得到实例,调用接口。。。一气呵成。呵呵。

看来上面的代码是不是很简单啊。。

欢迎大家交流。。


http://blog.sina.com.cn/s/blog_9d708b4f01016w2w.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值