`
yelinsen05
  • 浏览: 497873 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android之AIDL入门示例

阅读更多
做了一个小例子:
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>




分享到:
评论
2 楼 ritterliu 2013-06-19  
写的很好,谢谢分享
1 楼 a_niceday 2011-10-18  
怎么只是些例子而没有太多理论上讲解性的内容呢?

相关推荐

    安卓跨进程通信之AIDL使用入门

    本文将深入探讨AIDL的基本使用,帮助你快速入门。 首先,理解AIDL的基本概念是非常重要的。AIDL是一种接口定义语言,它允许你定义可以在不同进程间传递的数据类型和方法。通过AIDL,你可以创建一个接口,该接口将在...

    AIDL入门demo

    在本“AIDL入门demo”中,我们将深入理解AIDL的基本概念,以及如何通过AIDL实现在不同应用进程间的通信。** AIDL允许我们在Android应用程序之间定义接口,使得一个应用可以调用另一个应用中的服务或组件,即使这些...

    AidlDemo(简单aidl的例子.zip

    **描述解析:** "简单的Android学习源代码 aidl的使用方法 Android 入门学习的资历" 描述中提到这是一份适合初学者的教育资源,它提供了一个AIDL的实际应用案例,帮助学习者理解如何在Android应用中实现跨线程通信。...

    android开发从入门到精通光盘源代码.rar

    《Android开发从入门到精通》是一本旨在帮助初学者及进阶者掌握Android应用程序开发的教程书籍。随书附带的光盘源代码是作者为了辅助读者理解和实践书中理论知识而精心准备的资源集合。这些源代码涵盖了Android开发...

    AIDL Demo

    **Android Interface Definition Language (AIDL) 入门指南** 在Android开发中,有时我们需要在不同的应用程序组件之间进行进程间通信(IPC,Inter-Process Communication)。这时,Android Interface Definition ...

    Android Binder入门学习笔记

    总结来说,Android Binder入门学习需要理解以下几个关键点: 1. **Binder机制**:是Android系统实现进程间通信的基础,允许不同进程的对象交互。 2. **代理模式**:在Binder机制中,客户端通过代理对象间接调用...

    android开发资料大全

    Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 android开发环境之Logcat(日志)教程实例汇总 android网络通信之socket教程实例汇总 AsyncTask进度条加载网站数据到ListView 命令行开发、编译、打包...

    android ndk开发实例代码

    这个"android ndk开发实例代码"提供了一个入门级的示例,帮助开发者理解NDK和JNI(Java Native Interface)的结合使用。 JNI是Java平台的标准部分,它为Java代码提供了调用本地(非Java)代码的能力。在Android开发...

    android apidemo

    10. Android组件间通信:包括BroadcastReceiver和LocalBroadcastManager,以及AIDL(Android Interface Definition Language)用于进程间通信的实践。 通过对Android API Demo的深入学习和实践,开发者不仅可以掌握...

    Android第二行代码(郭霖全书源代码)

    19. **Android组件间的通信**:比如AIDL(Android接口定义语言)用于进程间通信(IPC),以及ContentProvider用于共享数据。 20. **Android应用发布**:了解签名、打包和上传到Google Play Store的过程,以及APK的...

    Android移动应用开发(项目实战教程)

    1. **Android Studio入门**: - 安装与配置:首先,我们需要下载并安装Android Studio,了解其界面布局,包括项目结构、编辑器、工具窗口等。 - 创建新项目:通过向导创建第一个“Hello World”应用,熟悉基本的...

    Android--Application-Service.rar_DEMO_service

    在Android开发中,Service是四大组件之一,它用于在后台执行长时间运行的操作,即使用户界面关闭仍然可以继续运行。这个"Android--Application-Service.rar_DEMO_service"的压缩包提供了一个学习Android Service基础...

    深入理解Android构架设计_TCLTeam.pdf

    2. **入门级范例**:通过具体的示例代码,指导读者如何实现自己的核心服务。 #### 十四、消息处理系统LOOPER、HANDLER、THREAD 这一部分详细阐述了Android系统中消息处理机制的工作原理,包括LOOPER、HANDLER和...

    Mstar基础知识

    Binder机制是Android特有的进程间通信(IPC)机制,它使用JavaBinder(AIDL)和C++Binder,介绍了Binder原理、示例和使用方法。 软件包补充说明部分,详细介绍了TvAPP/UI-LocalMM、Supernova、ICS、Kernel、JNI、...

    Android中使用Gradle来构建App项目的入门指南

    在`src/main`下,Java代码和资源分别位于`java`和`resources`目录,而Android插件还要求其他特定的目录,如`AndroidManifest.xml`、`res`、`assets`、`aidl`、`rs`和`jni`。 开发者可以根据需求自定义这些默认配置...

    Android远程服务编写和调用教程

    3. AIDL(Android Interface Definition Language):一种专用语言,用于定义远程服务接口,可被编译为Java源代码,简化服务调用流程。对于熟悉CORBA的开发者,可以理解为类似IDL的角色。 4. IInterface、IBinder...

Global site tag (gtag.js) - Google Analytics