做了一个小例子:
TestAIDLServer.apk是AIDL文件的服务端 TestAIDLProxy.apk是客户端
代码如下
TestAIDLServer中
package com.test.aidl;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class MyService extends Service {
public class MyServiceImpl extends IMyService.Stub {
public String getValue() throws RemoteException {
return "Android 链接成功";
}
}
public IBinder onBind(Intent intent) {
return new MyServiceImpl();
}
}
IMyService.aidl中
package com.test.aidl;
interface IMyService
{
String getValue();
}
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.aidl" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TestAIDLServer" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyService">
<intent-filter>
<action android:name="com.test.aidl.IMyService" />
</intent-filter>
</service>
</application>
</manifest>
TestAIDLProxy.apk中
吧TestAIDLServer中自动生成的IMyService.java连同包名一起考过来!
TestAIDLProxy.java
package com.test.proxy;
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.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.test.aidl.IMyService;
public class TestAIDLProxy extends Activity implements OnClickListener {
private IMyService myService = null;
private Button mButton1;
private Button mButton2;
private TextView textView;
private ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
// 获得服务对象
myService = IMyService.Stub.asInterface(service);
mButton2.setEnabled(true);
}
public void onServiceDisconnected(ComponentName name) {
}
};
public void onClick(View view) {
switch (view.getId()) {
case R.id.button01:
textView.setText(":-)");
// 绑定AIDL服务
bindService(new Intent("com.test.aidl.IMyService"),
serviceConnection, Context.BIND_AUTO_CREATE);
break;
case R.id.button02:
try {
textView.setText(myService.getValue()); // 调用服务端的getValue方法
} catch (Exception e) {
}
break;
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton1 = (Button) findViewById(R.id.button01);
mButton1.setOnClickListener(this);
mButton2 = (Button) findViewById(R.id.button02);
mButton2.setOnClickListener(this);
mButton2.setEnabled(false);
textView = (TextView) findViewById(R.id.mTextView01);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<Button android:text="@string/buttonstr1" android:id="@+id/button01"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="@string/buttonstr2" android:id="@+id/button02"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<TextView android:layout_width="fill_parent" android:id="@+id/mTextView01"
android:layout_height="wrap_content" android:text="@string/textviewstr" />
</LinearLayout>
分享到:
相关推荐
本文将深入探讨AIDL的基本使用,帮助你快速入门。 首先,理解AIDL的基本概念是非常重要的。AIDL是一种接口定义语言,它允许你定义可以在不同进程间传递的数据类型和方法。通过AIDL,你可以创建一个接口,该接口将在...
在本“AIDL入门demo”中,我们将深入理解AIDL的基本概念,以及如何通过AIDL实现在不同应用进程间的通信。** AIDL允许我们在Android应用程序之间定义接口,使得一个应用可以调用另一个应用中的服务或组件,即使这些...
**描述解析:** "简单的Android学习源代码 aidl的使用方法 Android 入门学习的资历" 描述中提到这是一份适合初学者的教育资源,它提供了一个AIDL的实际应用案例,帮助学习者理解如何在Android应用中实现跨线程通信。...
《Android开发从入门到精通》是一本旨在帮助初学者及进阶者掌握Android应用程序开发的教程书籍。随书附带的光盘源代码是作者为了辅助读者理解和实践书中理论知识而精心准备的资源集合。这些源代码涵盖了Android开发...
**Android Interface Definition Language (AIDL) 入门指南** 在Android开发中,有时我们需要在不同的应用程序组件之间进行进程间通信(IPC,Inter-Process Communication)。这时,Android Interface Definition ...
总结来说,Android Binder入门学习需要理解以下几个关键点: 1. **Binder机制**:是Android系统实现进程间通信的基础,允许不同进程的对象交互。 2. **代理模式**:在Binder机制中,客户端通过代理对象间接调用...
Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 android开发环境之Logcat(日志)教程实例汇总 android网络通信之socket教程实例汇总 AsyncTask进度条加载网站数据到ListView 命令行开发、编译、打包...
这个"android ndk开发实例代码"提供了一个入门级的示例,帮助开发者理解NDK和JNI(Java Native Interface)的结合使用。 JNI是Java平台的标准部分,它为Java代码提供了调用本地(非Java)代码的能力。在Android开发...
10. Android组件间通信:包括BroadcastReceiver和LocalBroadcastManager,以及AIDL(Android Interface Definition Language)用于进程间通信的实践。 通过对Android API Demo的深入学习和实践,开发者不仅可以掌握...
19. **Android组件间的通信**:比如AIDL(Android接口定义语言)用于进程间通信(IPC),以及ContentProvider用于共享数据。 20. **Android应用发布**:了解签名、打包和上传到Google Play Store的过程,以及APK的...
1. **Android Studio入门**: - 安装与配置:首先,我们需要下载并安装Android Studio,了解其界面布局,包括项目结构、编辑器、工具窗口等。 - 创建新项目:通过向导创建第一个“Hello World”应用,熟悉基本的...
在Android开发中,Service是四大组件之一,它用于在后台执行长时间运行的操作,即使用户界面关闭仍然可以继续运行。这个"Android--Application-Service.rar_DEMO_service"的压缩包提供了一个学习Android Service基础...
2. **入门级范例**:通过具体的示例代码,指导读者如何实现自己的核心服务。 #### 十四、消息处理系统LOOPER、HANDLER、THREAD 这一部分详细阐述了Android系统中消息处理机制的工作原理,包括LOOPER、HANDLER和...
Binder机制是Android特有的进程间通信(IPC)机制,它使用JavaBinder(AIDL)和C++Binder,介绍了Binder原理、示例和使用方法。 软件包补充说明部分,详细介绍了TvAPP/UI-LocalMM、Supernova、ICS、Kernel、JNI、...
在`src/main`下,Java代码和资源分别位于`java`和`resources`目录,而Android插件还要求其他特定的目录,如`AndroidManifest.xml`、`res`、`assets`、`aidl`、`rs`和`jni`。 开发者可以根据需求自定义这些默认配置...
3. AIDL(Android Interface Definition Language):一种专用语言,用于定义远程服务接口,可被编译为Java源代码,简化服务调用流程。对于熟悉CORBA的开发者,可以理解为类似IDL的角色。 4. IInterface、IBinder...