`

AIDL学习总结---- 绑定一个已经存在的Service

阅读更多
服务器端:

工程结构图:
[img]

[/img]

IPerson.aidl
package com.zzl.test;
interface IPerson { 
	void setName(String name);
	void setAge(int age);
	String display();
	
}


IPersonImpl
package com.zzl.test;

import android.os.RemoteException;

public class IPersonImpl extends IPerson.Stub{
	private String name;
	private int age;
	@Override
	public String display() throws RemoteException {
		return "name="+name+"age="+age;
	}

	@Override
	public void setAge(int age) throws RemoteException {
		this.age = age;
		
	}

	@Override
	public void setName(String name) throws RemoteException {
		this.name = name;
		
	}

}


MyRemoteService
package com.zzl.test;

import com.zzl.test.IPerson.Stub;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class MyRemoteService extends Service{
	private Stub iPerson = new IPersonImpl();
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return iPerson;
	}

}


MainActivity
package com.zzl.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    private Button btn_start;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btn_start = (Button) findViewById(R.id.button1);
        
        btn_start.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(getApplicationContext(),MyRemoteService.class);
				startService(intent);
				btn_start.setText("服务器已启动");
			}
		});
    }
}


res/layout/main.xml
<?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="启动服务器"
		android:id="@+id/button1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
</LinearLayout>


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.zzl.test"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <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>
        
       <service android:name="MyRemoteService"
				 android:process=":remote">
			<intent-filter>
        		<action android:name="com.zzl.test.MyRemoteService"></action>
    		</intent-filter>
		</service>

    </application>
</manifest>


注意:gen 下的 com.zzl.test下的文件时自动生成的。



客户端:
工程结构图:
[img]

[/img]

这里的src下的com.zzl.test这个包是从服务器拷过来的。
MainActivity:
package com.zzl.client;
import com.zzl.test.IPerson;

import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
	private IPerson iPerson;
    private Button btn_start;
    private ServiceConnection conn = new ServiceConnection(){

		@Override
		synchronized public void onServiceConnected(ComponentName name, IBinder service) {
			iPerson = IPerson.Stub.asInterface(service);
			if(iPerson!=null){
				try {
					//RPC方法调用
					iPerson.setName("无敌小鸡鸡");
					iPerson.setAge(6);
					String msg = iPerson.display();
					Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
				} catch (RemoteException e) {
					e.printStackTrace();
				}
			}
			
		}

		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
			
		}};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btn_start = (Button) findViewById(R.id.button1);
        
        btn_start.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				//设置Intent 的Action属性
				intent.setAction("com.zzl.test.MyRemoteService");
				//绑定服务
				bindService(intent, conn, Service.BIND_AUTO_CREATE);
			}
		});
    }
}
  • 大小: 10.8 KB
  • 大小: 9.7 KB
分享到:
评论

相关推荐

    AIDL----Android进程间通信(IPC)代码

    - 接口:AIDL文件以`.aidl`为扩展名,定义了一个接口,其中包含要跨进程暴露的方法。 - 方法:接口中声明的方法,包括返回值类型、参数类型和参数名称。 - 数据类型:AIDL支持基本数据类型(如int、float、String等...

    aidl-android-studio1.3.1

    在服务端,你需要创建一个Service来实现这个接口,并在`onBind()`方法中返回实现了AIDL接口的对象。例如: ```java public class MyService extends Service { private IMyAidlInterface.Stub binder = new ...

    使用AIDL实现Service与Client绑定后的双向调用

    有时,我们可能需要在Service和另一个应用组件之间进行更复杂的通信,例如双向交互,这时可以利用Android Interface Definition Language(AIDL)来实现。本文将深入探讨如何使用AIDL在Service与Client之间实现绑定...

    浅析aidl过程和绑定service的过程(不会使用的撤).zip

    本篇文章将深入探讨AIDL的工作原理以及如何绑定Service,帮助开发者理解这两个关键概念。 **AIDL简介** AIDL是一种特殊的接口定义语言,允许不同进程间的Android组件进行通信。当一个应用需要与另一个应用的Service...

    AIDL开发-文章源码

    在本项目源码中,我们可以看到一个完整的AIDL服务示例,包括服务端的Service实现、AIDL接口定义,以及客户端如何绑定服务并使用接口的方法。通过对这些源码的分析和实践,开发者可以更深入地理解Android的跨进程通信...

    Android aidl-sample.zip

    AIDL允许开发者定义服务接口,使得一个应用程序组件可以调用另一个在不同进程中运行的组件的方法。在这个"aidl-sample.zip"压缩包中,我们预计将找到一个完整的示例,包括服务端(Server)和客户端(Client)的代码...

    Aidl demo-master service

    AIDL(Android Interface Definition Language)是一个简单的接口定义语言,用于创建可以在不同进程中调用的方法。通过编写AIDL文件,你可以定义接口,包括方法的输入和输出参数。Android会自动生成对应的Java代码,...

    安卓AIDL相关-AIDLService远程调用例子。包括服务端与客户端两个工程文件.zip

    在服务端,你需要创建一个实现了AIDL接口的类,并在服务(Service)中绑定(bind)这个类。而在客户端,你需要创建一个服务连接(ServiceConnection),在onServiceConnected()方法中获取到服务端提供的IMyService...

    android笔记--Service与AIDL

    1. 当Service需要在不同进程中被其他应用调用时,可以使用AIDL定义一个接口,服务端实现该接口并在Service中暴露出来。 2. 客户端通过bindService()绑定到Service,并在onServiceConnected()回调中获取到AIDL接口的...

    Service AIDL实例

    当我们需要一个应用程序组件(如服务Service)与另一个不同进程的应用组件进行数据交换时,AIDL就显得尤为重要。在本实例"Service AIDL"中,我们将探讨如何使用AIDL实现跨应用通信。 1. **AIDL基础** - AIDL文件是...

    AIDL-demo源码

    AIDL(Android Interface Definition Language)是Android提供的一种机制,它允许开发者定义接口,使得一个应用可以调用另一个应用中的服务。本教程将深入解析"AIDL-demo"源码,以帮助你理解AIDL的工作原理和实际...

    一个及其简单的AIDL远程Service调用

    本示例"一个及其简单的AIDL远程Service调用"展示了如何通过AIDL在客户端(TestAidlClient)与服务端(TestAidlService)之间建立通信,实现远程调用。 首先,我们需要理解Service的基本概念。在Android中,Service...

    安卓AIDL相关-一个小Demo演示安卓AIDL本地通信.zip

    在Android应用开发中,当需要一个应用组件(如Activity或Service)与另一个不同进程的应用组件进行通信时,AIDL就显得尤为重要。本Demo旨在通过一个简单的例子展示如何使用AIDL实现本地通信。 首先,我们来理解AIDL...

    绑定服务BoundService详解之AIDL的使用(自定义属性也包含其中)

    首先,我们需要创建一个AIDL文件,例如`IMyService.aidl`,在这个文件中定义服务需要暴露的接口。AIDL文件的基本语法类似于Java,但更注重于数据传输。例如,你可以定义一个方法`getCustomData()`,返回一个自定义的...

    安卓Service和AIDL使用示例代码

    AIDL(Android Interface Definition Language)是Android提供的一个工具,用于处理进程间通信(IPC, Inter-Process Communication),使得不同进程间的组件能够相互通信。本示例代码将探讨如何在Android应用中使用...

    通过aidl service调用activity

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于跨进程通信(IPC,Inter-Process Communication)的机制,使得一个应用可以调用另一个应用中的服务。本篇将深入探讨如何通过AIDL来调用...

    Android 使用AIDL跨进程通信--传递自定义对象

    `IRemoteBinder.aidl`可能定义了一个接口,该接口包含了处理跨进程通信的方法,而`Book.aidl`则可能定义了一个自定义的数据类型`Book`,这个类型将在进程间传递。 `IRemoteBinder.aidl`可能会这样写: ```aidl ...

    Android RemoteService AIDL 方式实现

    AIDL(Android Interface Definition Language)是Android提供的一个工具,用于在不同进程间定义和实现接口,使得跨进程通信(IPC,Inter-Process Communication)变得简单。现在,我们来详细探讨如何通过AIDL在...

    Android 中如何使用 AIDL 详细解析(源代码)

    AIDL使得一个应用程序能够暴露其服务给其他应用程序,即使它们运行在不同的进程中。通过AIDL,我们可以定义接口,使得客户端和服务端能够交换数据,进行方法调用。本篇文章将详细介绍如何在Android中使用AIDL,并...

    安卓aidl学习源码

    - **aidlStudy**: 这个目录下可能包含了一个实现AIDL接口的服务端代码。主要涉及创建AIDL接口,实现接口,并在服务启动时绑定到该接口的实现类。 - **aidlClient**: 客户端代码,它会通过bindService()方法连接到...

Global site tag (gtag.js) - Google Analytics