aidl

[Android]用AIDL生成Service

早过忘川 提交于 2019-12-09 14:57:27
对于用aidl生成Service,以前做过,这里记录一下,顺便也整理一下思路。 1、创建aidl文件。 这个aidl文件必须包括包名,和用interface的形式定义方法。 例如:IAIDLService.aidl。 package com.ting.androidexample.services; interface IAIDLExampleService { void show(); void function(String packageName, IBinder binder); } 因为我是在eclipse中开发,所以这时会在gen目录下自动生成IAIDLExampleService.java文件。 2、创建AIDLService.java文件。 这个文件是一个Service,因此要继承Service类,因为Service是抽象类,因此,要实现抽象的onBind方法。onBind方法的返回值是一个Binder,这个Binder是要传给客户端的。这个Binder要继承自由aidl文件自动生成的IAIDLService.java类中的抽象子类Stub。而这个抽象子类中未实现的方法就是我们在IAIDLService.aidl中定义的方法。 public class AIDLService extends Service { private final IAIDLService

Android AIDL的实现

心已入冬 提交于 2019-12-09 13:43:07
AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。 【一】AIDL文件的创建: AIDL使用简单的语法来声明接口,描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型,甚至是其他AIDL生成的接口。 其中对于Java编程语言的基本数据类型 (int, long, char, boolean等),String和CharSequence,集合接口类型List和Map,不需要import 语句。 而如果需要在AIDL中使用其他AIDL接口类型,需要import,即使是在相同包结构下。AIDL允许传递实现Parcelable接口的类,需要import. 需要特别注意的是, 对于非基本数据类型,也不是String和CharSequence类型的,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置。 AIDL只支持接口方法,不能公开static变量。 其中AIDL的方法还提供了oneway这个关键字

Passing an object from one application to another in android

99封情书 提交于 2019-12-07 18:06:55
问题 After lot of googeling, I could not find any way to pass a object from one application to other application.Though I know that we can pass object from one activty to other activity using Parcel but how to do this between applications? My object is this public class MyObject { private String name; public String getName() { return this.name; } public void setName(String name) { this.name=name; } } Then how to do this like we do for passing object between activities intent.putExtra("key",new

[翻译]Android Bound Services

[亡魂溺海] 提交于 2019-12-07 16:17:59
一个bound service是一个client-server接口中的server端。一个bound service允许应用组件(比如activities)bind到它,发送请求,接收响应,甚至是执行进程间通信(IPC)。一个bound service在典型情况下,只有在它服务于另一个应用组件时才存活,而不是在后台无限期的运行。 这份文档向您说明了要如何创建bound service,包括在其他的应用组件中如何bind到service。然而,你也应该参考Services文档来 大体地 了解关于services的额外信息,比如如何在service中传送通知,设置service在前台运行,等等。 基本概念 一个bound service是一个 Service 类的实现,它允许其它应用bind到它并与它交互。为了给一个service提供binding功能,你必须实现 onBind() 回调方法。这个方法返回一个 IBinder 对象,该对象则定义了客户端可以用来与service进行交互的编程接口。 Binding到一个Started Service 如同在 Services 文档中讨论的那样,你可以创建一个service,既可以被started,也可以被bound。即,service可以通过调用 startService() 被started,从而允许service无限期的运行

简单音乐播放实例的实现,Android Service AIDL 远程调用服务

大憨熊 提交于 2019-12-06 20:10:15
Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成。 AIDL 是什么 AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。 AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。 AIDL 的作用 由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。   通过代码来实现这个数据传输过程是冗长乏味的,Android提供了AIDL工具来处理这项工作。 选择AIDL的使用场合 官方文档特别提醒我们何时使用AIDL是必要的

Android 使用Messenger跨进程通信框架

柔情痞子 提交于 2019-12-06 12:30:20
一.通过Binder绑定形式的通信 上一篇说道Binder机制的通信框架,也说过Messenger的底层实现自AIDL,因此对于跨进程通信中,Messenger是一种比较高级的框架,可以说对于一个app开发者来说重要性不言而喻 服务端模型 public class BackgroundService extends Service { private Messenger mMessenger = null;//监听数据 private Messenger replyMessenger = null //响应数据 @Override public IBinder onBind(Intent intent) { if(mMessenger==null) { mMessenger = new Messenger(new ServerHandler()); } return mMessenger.getBinder(); } @Override public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } //注意,将ServerHandler静态化,以防止内存泄露 public static class ServerHandler extends Handler { @Override public

Android Camera Framework for API2

不问归期 提交于 2019-12-06 10:43:03
问题 Android camera framework has evolved a lot over the years. During the days of API 1, the camera application framework (Java implementation) used to interact with native camera service (C++ implementation) using a JNI glue layer which also implemented binder. This mechanism was fairly straightforward to understand, on a higher level. Now, I can see that for API 2, JNI layer is removed and application framework talks directly to the native camera service using aidl interfaces. Refer

android: couldn't find import for class error in aidl files com.android.internal.telephony.gsm.NetworkInfo

烈酒焚心 提交于 2019-12-06 05:24:46
I am trying to re-use PhoneUtils.java ( ~/android_src/packages/apps/ Phone/src/com/android/phone/ ) within my app with some customizations. I have added INetworkQueryServiceCallback.aidl and INetworkQueryService.aidl into my app folder ( ~/android_src/packages/ apps/USSDActivity/src/com/myapp/ussdactivitytest ) however when i am building alongside android source I am getting the following error: Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Aidl: com.myapp.ussdactivity <= packages/apps/USSDActivity/src/com/myapp/ussdactivitytest

Passing an object from one application to another in android

泄露秘密 提交于 2019-12-06 03:11:33
After lot of googeling, I could not find any way to pass a object from one application to other application.Though I know that we can pass object from one activty to other activity using Parcel but how to do this between applications? My object is this public class MyObject { private String name; public String getName() { return this.name; } public void setName(String name) { this.name=name; } } Then how to do this like we do for passing object between activities intent.putExtra("key",new MyOject()); I'm assuming you're in charge of both applications. Which of these situations is true? Both

Android : Do Application Login in background on boot-up

自闭症网瘾萝莉.ら 提交于 2019-12-06 03:00:46
问题 I have a VOIP Application, I need to login the application in background on device bootup. Currently the init to my application is done on UI Active( onCreate() ). I have the following things in my mind, can anyone help and clear my doubts. The service design is must to achieve this task?? Which Service Remote(AIDL) or Local Service and why? How does the UI and Service interaction happens? After UI is active who gets the Call- Backs? UI or Service ? Should i make Service as my Controller i.e