`
holoblog
  • 浏览: 1255935 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19411
文章分类
社区版块
存档分类
最新评论

android_aidl_comm

 
阅读更多

很多人对AIDL的使用还是不太清楚,自己也在运用中也遇到了不少麻烦,在这里我就简单示例了一个DEMO,之前也参考过相关的文章,所以在这里就直接贴源码了,希望能给有关人士带来帮助,并以思维导图的方式进行描述:

<!--StartFragment -->

上面是贴图,下面就直接是源码了:

A_To_B:project

MainActivity.java:

package com.jsd.aidl;

import com.jsd.aidl.service.RemoteService;

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;

/**
*
* @author jiangshide
*
*/
public class MainActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getViewById();
}

public void getViewById(){
Button start = (Button) findViewById(R.id.startService);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, RemoteService.class);
startService(intent);
}
});
}

}

Data.aidl:

package com.jsd.aidl.service;

parcelable Data;

ICommonService.java:

package com.jsd.aidl.service;
import com.jsd.aidl.service.Data;
interface ICommonService{
String addString(String str);
void addData(in Data data);
Data getData();
}

RemoteService.java:

package com.jsd.aidl.service;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

/**
*
* @author jiangshide
*
*/
public class Data implements Parcelable {

private static String TAG = "Data";
public Data(Parcel source){
name = source.readString();
type = source.readInt();
addr = source.readString();
Log.i(TAG, name);
}
public static final Parcelable.Creator<Data> CREATOR = new Parcelable.Creator<Data>() {
@Override
public Data createFromParcel(Parcel source) {
return new Data(source);
}

@Override
public Data[] newArray(int size) {
Log.i(TAG, size+":");
return new Data[size];
}

};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
Log.i("TAG", "dest:"+name);
dest.writeString(name);
dest.writeInt(type);
dest.writeString(addr);
}

private String name;
private int type;
private String addr;
public Data(){
}
public Data(String name ,int type,String addr){
this.name = name;
this.type = type;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Data [name=" + name + ", type=" + type + ", addr=" + addr + "]";
}
}

Data.java:

package com.jsd.aidl.service;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

/**
*
* @author jiangshide
*
*/
public class Data implements Parcelable {

private static String TAG = "Data";
public Data(Parcel source){
name = source.readString();
type = source.readInt();
addr = source.readString();
Log.i(TAG, name);
}
public static final Parcelable.Creator<Data> CREATOR = new Parcelable.Creator<Data>() {
@Override
public Data createFromParcel(Parcel source) {
return new Data(source);
}

@Override
public Data[] newArray(int size) {
Log.i(TAG, size+":");
return new Data[size];
}

};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
Log.i("TAG", "dest:"+name);
dest.writeString(name);
dest.writeInt(type);
dest.writeString(addr);
}

private String name;
private int type;
private String addr;
public Data(){
}
public Data(String name ,int type,String addr){
this.name = name;
this.type = type;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Data [name=" + name + ", type=" + type + ", addr=" + addr + "]";
}
}

AndroidManifest.xml:

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

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="com.jsd.aidl.service.RemoteService"></action>
</intent-filter>
</activity>

<service android:name="com.jsd.aidl.service.RemoteService" android:process=":remote">

</service>

</application>
</manifest>

B_To_A:

MainActivity.java:

package com.jsd.aidl;

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.view.View;
import android.widget.EditText;
import android.widget.TextView;

import com.jsd.aidl.service.Data;
import com.jsd.aidl.service.ICommonService;

/**
*
* @author jiangshide
*
*/
public class MainActivity extends Activity {

private ICommonService mRemoteSerivce;
private ServiceConnection mRemoteConnection = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
mRemoteSerivce = ICommonService.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mRemoteSerivce = null;
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mInputStr = (EditText)findViewById(R.id.input_str);
mShowString = (TextView)findViewById(R.id.show_string);

mInputName = (EditText)findViewById(R.id.input_name);
mInputType = (EditText)findViewById(R.id.input_type);
mShowObject = (TextView)findViewById(R.id.show_object);

bindService(new Intent("org.guoyu.service.RemoteService"),
mRemoteConnection ,
Context.BIND_AUTO_CREATE);

}

public void addstring(View v){
String inputStr = mInputStr.getText().toString();
try {
String result = mRemoteSerivce.addStr(inputStr);
Data d = mRemoteSerivce.getData();
if(inputStr.equals(result)){
System.out.println("result:"+result);
mShowString.setText("add success!add data for:"+result);
}else{
mShowString.setText("add success!add data for: fail");
}
} catch (RemoteException e) {
mShowString.setText("Remote Connection ERROR");
}
}

public void adddata(View v){
String inputName = mInputName.getText().toString();
int inputType = Integer.parseInt(mInputType.getText().toString());
String inputStr = mInputStr.getText().toString();
try {
mRemoteSerivce.addData(new Data(inputName ,inputType, inputName));
} catch (RemoteException e) {
mShowObject.setText("add object ERROR");
}
mShowObject.setText("add object success");
}

public void getdata(View v){
try {
Data data = mRemoteSerivce.getData();
mShowObject.setText(data.toString());
} catch (RemoteException e) {
mShowObject.setText("get object ERROR");
}
}


@Override
public void onDestroy(){
unbindService(mRemoteConnection);
super.onDestroy();
}

private EditText mInputStr;
private EditText mInputName;
private EditText mInputType;
private TextView mShowString;
private TextView mShowObject;
}

Data.aidl

package com.jsd.aidl.service;
parcelable Data;

ICommonService.aidl:

package com.jsd.aidl.service;
import com.jsd.aidl.service.Data;

interface ICommonService{
String addStr(String str);
void addData(int Data data);
Data getData();
}

Data.java:

package com.jsd.aidl.service;

import android.os.Parcel;
import android.os.Parcelable;

/**
*
* @author jiangshide
*
*/
public class Data implements Parcelable {
public Data(Parcel source){
name = source.readString();
type = source.readInt();
addr = source.readString();

}
public static final Parcelable.Creator<Data> CREATOR = new Parcelable.Creator<Data>() {
@Override
public Data createFromParcel(Parcel source) {
return new Data(source);
}

@Override
public Data[] newArray(int size) {
return new Data[size];
}

};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(type);
dest.writeString(addr);
}
private String name;
private int type;
private String addr;
public Data(){
}
public Data(String name ,int type,String addr){
this.name = name;
this.type = type;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Data [name=" + name + ", type=" + type + ", addr=" + addr + "]";
}
}

AndroidManifest.xml:

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

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="com.jsd.aidl.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>

</application>
</manifest>

以上就是一个简单的两个应用之间实现通行的简单过程,如果需要的朋友可以参看更详细的官方文档

分享到:
评论

相关推荐

    aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

    AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信,特别是当服务(Service)需要与客户端(如Activity)跨进程交互时。AIDL帮助开发者定义接口,使得...

    android_aidl例子

    在Android开发中,AIDL(Android Interface Definition Language)是一种重要的工具,用于实现应用程序间的跨进程通信(IPC,Inter-Process Communication)。AIDL使得一个应用能够暴露其服务给其他应用调用,即使...

    android_aidl_进程间通讯demo

    在这个"android_aidl_进程间通讯demo"中,我们将探讨如何通过AIDL来构建服务并进行跨进程通信。 首先,我们来看标题"android_aidl_进程间通讯demo",它明确指出这个示例项目是关于AIDL在处理进程间通信中的应用。...

    android_AIDL_DEMO

    在"android_AIDL_DEMO"这个示例中,我们有两个apk,一个是服务端,另一个是客户端,它们通过AIDL进行通信。 **AIDL基本概念** 1. 接口:AIDL定义的接口就像Java中的接口,包含一系列的方法声明。这些方法会被服务端...

    android_service_and_aidl_server_client.zip

    本示例项目"android_service_and_aidl_server_client.zip"就是演示如何使用Service和AIDL来实现在不同应用之间进行数据交换。 首先,让我们详细了解一下Android Service。Service是Android四大组件之一,用于在后台...

    Android_aidl_DEMO

    在这个`Android_aidl_demo`中,我们可能会看到以下关键文件: - `IMyService.aidl`:定义了服务端提供的接口。 - `IMyServiceImpl.java`:实现了`IMyService`接口的服务端逻辑。 - `MainActivity.java`:客户端...

    android_AIDL分析

    ### Android AIDL 分析 #### 一、AIDL 原理及应用场景 **AIDL**(Android Interface Definition Language)是Android平台提供的一种用于定义进程间通信接口的语言。它主要用于实现不同进程之间的通信,即**IPC**...

    AndroidStudio_jar_aar_aidl_demosAll

    jar包,aar包,aidl,aidl打成aar包的正确使用方式,基于Android Studio 3.2的各种demo。 配合博客https://blog.csdn.net/Mis_wenwen/article/details/83084657进行学习

    AIDL_AidlService_android_

    **Android AIDL(Android Interface Definition Language)详解** 在Android系统中,进程间的通信(IPC,Inter-Process Communication)是至关重要的,特别是在多个组件之间需要共享数据或者服务时。AIDL(Android ...

    传智播客_Andorid_20天精通Android开发视频_第12天视频_视频_15_aidl过程

    传智播客_Andorid_20天精通Android开发视频_第12天视频_视频_15_aidl过程.avi

    Android服务Aidl的示例demo

    Android下Aidl的使用,详细请参见博客:http://www.cnblogs.com/plokmju/p/android_Service_aidl_NormalType.html 和 http://www.cnblogs.com/plokmju/p/android_Service_aidl_CustomType.html

    传智播客_Andorid_20天精通Android开发视频_第12天视频_视频_13_aidl&ipc&rpc概念

    传智播客_Andorid_20天精通Android开发视频_第12天视频_视频_13_aidl&ipc&rpc概念.avi

    study_aidl_传递对象.zip

    本资料"study_aidl_传递对象.zip"专注于讲解如何通过AIDL在Android 4.2版本中传递对象。下面我们将详细探讨这个主题。 首先,AIDL的基本概念是定义一个接口,这个接口可以在不同的进程中被实现和使用。在Android ...

    android_home 环境变量配置

    - `%ANDROID_HOME%\tools`路径是为了确保可以访问到一些额外的工具,比如`aidl`等。 #### 三、验证配置是否成功 完成以上步骤后,可以通过以下几种方式来验证`ANDROID_HOME`环境变量是否配置成功: 1. **命令行...

    IPC_AIDLDemo

    【IPC_AIDLDemo】是基于Android开发的一个示例项目,展示了如何使用Android Interface Definition Language (AIDL)来实现进程间通信(Inter-Process Communication, IPC)。在Android系统中,由于安全性和资源管理的...

    android_AIDL:AIDL的理解和使用

    在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于处理进程间通信(IPC, Inter-Process Communication)。AIDL使得Android应用能够跨进程调用其他应用的服务,实现不同应用...

    study_aidl.zip

    在Android系统中,AIDL(Android Interface Definition Language)是一种用于实现跨进程通信(IPC, Inter-Process Communication)的工具。AIDL允许服务和应用程序组件之间进行数据交换,即使它们运行在不同的进程中...

Global site tag (gtag.js) - Google Analytics