文档章节

AIDL简单使用(通过它跨应用传递对象(数据))

初来小修
 初来小修
发布于 2016/02/20 13:46
字数 700
阅读 97
收藏 0

服务端步骤:


1、新建一个包 在包里新建一个接口MyServiceAIDL(接口名自己取)

 

代码

//接口前面不要有public 等 不然会报错
interface MyServiceAIDL {
//这个接口内的方法可以自己根据业务需求自己添加相应的方法
//这里简单建一个getData方法
//方法名前面不要有public 等不然会报错
 String getData();
}

 


2、建完好接口需要到找到你新建的接口类,工程保存路径:右击工程-->properties-->右边有个Location位置
根据该位置找到自己刚刚新建的接口类,然后把后缀名改为.aidl 在回到自己工程刷新一下

 

 

3、在建一个类继承Service

 

代码

 public class MyService extends Service {
 @Override
 public void onCreate() {
  // TODO Auto-generated method stub
  super.onCreate();
 }
 
 @Override
 public IBinder onBind(Intent intent) {
  // TODO Auto-generated method stub
  return new MyBindService();
 }
 
 @Override
 public boolean onUnbind(Intent intent) {
  // TODO Auto-generated method stub
  return super.onUnbind(intent);
 }
 
 @Override
 public void onDestroy() {
  // TODO Auto-generated method stub
  super.onDestroy();
 }
 
 //AIDL --> 要继承Stub 而不是Binder
 //然后还要在配置清单里添加服务(隐式意图)
 class MyBindService extends Stub{
  @Override
  public String getData() throws RemoteException {
   // TODO Auto-generated method stub
   return "(跨进程)服务端返回来的消息";
  }
  
 }
}

 

 

4、在配置清单里注册创建的服务

代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.service.aidl"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <!-- android:exported="true"表示可以跨进程访问
        android:enabled="true"表示激活
        action 表示客户端要访问在这里的服务的路径action -->
        <service android:name=".MyService"
            android:enabled="true"
            android:exported="true">
            <intent-filter >
                <action android:name="com.examp.remote.service.MyService"/>
            </intent-filter>
        </service>
        
    </application>
</manifest>

 

 

 

 

 

========================================================

 

 

 

 


服务端写好后写客户端

 

客户端步骤:


1、把服务端新建的接口连同包一起拷贝到客户端的源文件(src)下

 


2、MainActivity.java类


代码

public class MainActivity extends Activity {
 private TextView text_info;
 private MyServiceAIDL myServiceAIDL;//声明自己建的接口对象
 private ServiceConnection connection = new ServiceConnection() {
  @Override
  public void onServiceDisconnected(ComponentName name) {
   // TODO Auto-generated method stub
   
  }
  
  @Override
  public void onServiceConnected(ComponentName name, IBinder binder) {
   //通过Stub.asInterface方法把IBinder返回来的对象转换然后赋值给MyServiceAIDL接口声明的对象
   myServiceAIDL = Stub.asInterface(binder);
   
  }
 };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  this.text_info = (TextView) this.findViewById(R.id.textview);
  
  bindMyService();//绑定服务
 }
 
 private void bindMyService() {
  Intent intent = new Intent();
  
  //通过隐式意图来绑定服务
  intent.setAction("com.examp.remote.service.MyService");
  bindService(intent, connection, Context.BIND_AUTO_CREATE);
 }
 
 //按钮的事件监听
 public void bindRemoteService(View view){
  try {
   //这里通过自己创建的接口对象来获取服务端的数据
   text_info.setText(myServiceAIDL.getData());
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

 

 

效果图示例:

 

 

 

© 著作权归作者所有

初来小修
粉丝 4
博文 117
码字总数 80711
作品 0
广州
私信 提问
AIDL-Android接口描述语言实现跨进程通讯

在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享. 因此传递对象, 只能把对象拆分成...

鉴客
2011/09/15
1K
0
Android高手进阶教程(二十五)之---Android 中的AIDL!!!

大家好,好久不见,今天要给大家分享的是android aidl的使用。在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢? 显然,...

迷途d书童
2012/02/29
298
1
Service与Android系统设计(2)

特别声明:本系列文章LiAnLab.org著作权所有,转载请注明出处。作者系LiAnLab.org资深Android技术顾问吴赫老师。本系列文章交流与讨论:@xhe_href="http://weibo.com/21cnbao" href="http://...

21cnbao
2012/10/18
0
0
android使用aidl实现进程间通信

在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然,Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的...

AlexZhuang
2012/04/20
0
2
Android温故而知新 - AIDL

这篇文章让我们一起来复习一下aidl aidl的简单用法 aidl的用法是很简单的。首先创建IDemoAidlInterface.aidl文件(在服务端工程和客户端工程中需要分别定义一个相同的aidl文件): 然后在servi...

嘉伟咯
2017/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

佳博标签打印问题-

由于网页打印不行,要么sdk 写成activex,这样浏览器支持又有局限。 因此,采用客户端编写打印服务启动,定时轮询服务端打印队列,从服务的获取打印队列进行打印。 服务端web 点击打印,讲打...

mellen
3分钟前
0
0
Jmeter利用JMXMon插件监控服务器JVM情况

效果展示: 1、Jmeter下载JMXMon插件 2、Jmeter 添加 JMXMon请求 远程监控JVM状态需要在JVM启动时候加上一段参数才行,在tomcat bin目录下找到catalina.sh 在# OS specific support. $var _...

覃光林
4分钟前
0
0
Qt编写安防视频监控系统(界面很漂亮)

一、前言 视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸...

飞扬青云
8分钟前
1
0
Python的requests库中的Put方式使用

1.后端接口 @PutMapping public ResponseEntity<MyObject> putMyObject( @RequestBody MyObject myObject) { ... } Put请求参数在请求体里面。 1.前端请求 import requestsimpo......

亚林瓜子
9分钟前
0
0
全站加速(DCDN)- IP应用加速产品解读

5月22日下午15点,阿里云全站加速(DCDN)-IP应用加速如期发布。IP应用加速是阿里云自主研发的一款更高效、更安全、更便捷的动态加速产品,结合阿里云CDN本身的资源优势,利用就近接入、智能...

迷你芊宝宝
13分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部