android AIDL 入门,最最简单的例子
2016-11-11 17:16
316 查看
AIDL 是干嘛的?自己去百度其他人写的,有时候蛮烦这样的东西的,那有那多废话,先写出来再说啊,这里给出最简单的例子,就A程序传一串字符串给B程序。就是所谓的进程间通信,槽,不就是2APP之间的通信,说的那么难懂干掉。android 不就是linux系统,每个程序都是一个独立的进程,就是在内存里的一个区域都是这个程序的,默认是相互看不到的,所以需要2个之间进行交流,就是进程间通信了。
首先,要明白,这里写的通信是2个APP之间的通信,当然有其他办法通信,这里不讲。
那好了,你需要建2个项目,也就是2个APP。我是用AS写的,Eclispe我不知道怎么写。
第一个是服务端,服务端只是这样叫的名字,通信嘛,就看谁是主谁是副了?主的就是服务端啊,那接收数据的就是客户端了,马丹,开始看别个写的时候以为APP是和服务器通信,想半天都不明白为嘛要和服务器通信,这样取名真的很害人的,槽。总之,服务端也是APP,客户端也是。
好了,开始上代码。
服务端包结构
下面按照图中的标号去写。
首先是2位置,你需要在main目录上右键创建一个aidl的目录。
然后创建一个包名。
在2的位置右键创建一个图中的3位置的aidl 文件。
代码是
Jiang.aidl
很简单的就只有一个方法,返回一个字符串。
点击菜单栏的Build 的make project 就会自动生成图中1的文件。
下面写服务的代码,也就是图中4位置的文件。
代码差不多OK 了,下面写配置文件。sericer需要配置的。
如下:
上面的 < action android:name=”com.jf.aidl”/>是需要配置的,在客户端需要去调用。
服务端的就这么多了。
客户端开始:
将服务端aidl 文件全部拷贝过来,注意包名的一致。拷贝后如图所示。
注意这里的图中的包名要和服务端的一致。要不是找不到服务端的对象的。
在build.gradle中需要加
看效果的时候,先运行服务端到手机,在运行客户端到手机,就可以看到重服务端传过来的字符串。
可能遇到的问题,第一就是客户端和服务端的aidl文件包名不是一致的,第二在服务端的build.gradle中没有加入上面的代码,第三服务端和客户端没有都运行。
差不多就这些了,其实还是有很多坑的。
首先,要明白,这里写的通信是2个APP之间的通信,当然有其他办法通信,这里不讲。
那好了,你需要建2个项目,也就是2个APP。我是用AS写的,Eclispe我不知道怎么写。
第一个是服务端,服务端只是这样叫的名字,通信嘛,就看谁是主谁是副了?主的就是服务端啊,那接收数据的就是客户端了,马丹,开始看别个写的时候以为APP是和服务器通信,想半天都不明白为嘛要和服务器通信,这样取名真的很害人的,槽。总之,服务端也是APP,客户端也是。
好了,开始上代码。
服务端包结构
下面按照图中的标号去写。
首先是2位置,你需要在main目录上右键创建一个aidl的目录。
然后创建一个包名。
在2的位置右键创建一个图中的3位置的aidl 文件。
代码是
Jiang.aidl
package com.lypeer.ipcclient; interface Jiang { String getValue(); }
很简单的就只有一个方法,返回一个字符串。
点击菜单栏的Build 的make project 就会自动生成图中1的文件。
下面写服务的代码,也就是图中4位置的文件。
package com.lypeer.ipcserver.service; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; import com.lypeer.ipcclient.Jiang; public class JiangServer extends Service { public JiangServer() { } @Override public IBinder onBind(Intent intent) { return jiang; } Jiang.Stub jiang = new Jiang.Stub() { @Override public String getValue() throws RemoteException { String s = "我是测试数据,您能接收到吗?"; return s; } }; }
代码差不多OK 了,下面写配置文件。sericer需要配置的。
如下:
<service android:name=".service.JiangServer" android:exported="true"> <intent-filter> <action android:name="com.jf.aidl"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </service>
上面的 < action android:name=”com.jf.aidl”/>是需要配置的,在客户端需要去调用。
服务端的就这么多了。
客户端开始:
将服务端aidl 文件全部拷贝过来,注意包名的一致。拷贝后如图所示。
package com.lypeer.ipcclient; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; public class JiangAidlActivity extends Activity { private Jiang mJiang; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_jiang_aidl); Intent intent = new Intent(); intent.setAction("com.jf.aidl"); intent.setPackage("com.lypeer.ipcserver"); bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); } private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d("jf_aidl", "service connected"); mJiang = Jiang.Stub.asInterface(service); try { Log.d("jf_aidl", mJiang.getValue()); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { Log.d("jf_aidl", "service disconnected"); } }; @Override protected void onDestroy() { super.onDestroy(); unbindService(mServiceConnection); } }
注意这里的图中的包名要和服务端的一致。要不是找不到服务端的对象的。
在build.gradle中需要加
sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/aidl'] } }
看效果的时候,先运行服务端到手机,在运行客户端到手机,就可以看到重服务端传过来的字符串。
可能遇到的问题,第一就是客户端和服务端的aidl文件包名不是一致的,第二在服务端的build.gradle中没有加入上面的代码,第三服务端和客户端没有都运行。
差不多就这些了,其实还是有很多坑的。
相关文章推荐
- Android AIDL入门例子<转>
- Android读写文件的一个简单入门的例子
- Android入门(5)最简单的Handler例子
- Android例子—AIDL实现两个进程间的简单通信
- Android入门(5)最简单的Handler例子
- android开发入门笔记:AIDL简单入门
- 地图入门(一):Android上使用Google Maps加标注的最最简单的例子
- Android中关于JNI 的学习(零)简单的例子,简单地入门
- Android中 AIDL 的简单实用例子
- android基础知识之AIDL简单入门
- Android AIDL的简单例子
- android基础知识之AIDL简单入门
- Android中关于JNI 的学习(零)简单的例子,简单地入门
- Android入门(5)最简单的Handler例子
- android AIDL简单入门(客户端与服务端)
- 一个android中AIDL的简单例子
- Android 简单例子以及入门学习资料链接
- 一个简单的Struts Hibernate入门例子(下)
- Android 入门开发指南之四 -- Hello,Android例子(下)
- 入门1--结合javascript制作一个简单的silverlight1.0例子