Создание файла AIDL в Eclipse

Простой вопрос... как вы создаете файлы AIDL в проекте Android с помощью Eclipse? Например, если я пытаюсь выбрать File -> New -> Other...ADT не может создать AIDL. AIDL является более или менее интерфейсом, но если я создаю интерфейс (класс), файл создается с расширением.java. В Eclipse я не могу просто изменить класс, чтобы дать ему расширение.aidl.

Может быть, я слишком полагаюсь на ADT для такой тривиальной задачи, но я удивлен, что не вижу простого способа создания файла AIDL. Конечно, я также могу просто создать новый файл и дать ему собственное расширение, но тогда файл AIDL не имеет автоматической подсветки синтаксиса.

2 ответа

Щелкните правой кнопкой мыши пакет -> новый -> файл

затем введите ваше имя интерфейса вместе с расширением aidl, например:

myEclipseAIDLInterface.aidl

Сначала позвольте мне объяснить, что такое файл AIDL:

Каждое Android-приложение работает в своем собственном процессе. Таким образом, одно приложение не может получить доступ к области памяти другого приложения ИЛИ другими словами, один процесс не может получить доступ к памяти другого процесса. Поэтому, чтобы это произошло, нам нужно разложить их объекты на примитивы, которые операционная система сможет понять и маршалировать объекты через эту границу для вас. Код для такой сортировки утомительно писать, поэтому Android обрабатывает его для вас с помощью AIDL, то есть межпроцессное взаимодействие (IPC) может быть легко обработано через AIDL. Для лучшего понимания рассмотрите это как связь между клиентскими и серверными приложениями. Клиент отправляет запрос, а сервер отвечает обратно. Этот учебник объяснит эту межпроцессную коммуникацию простым способом с ясным примером и исходным кодом. Чтобы сделать наш пример простым, давайте возьмем запрос на расчет. Клиентское приложение получит от пользователя два номера и отправит на сервер приложение. Серверное приложение выполнит сложение этих чисел и вернет сумму клиентскому приложению.

AIDL может быть достигнут, выполнив следующие шаги: Определите интерфейс AIDL - AIDL, который взаимодействует с вашими приложениями. Реализация интерфейса - вышеупомянутый интерфейс будет реализован в службе, чтобы клиенты могли получить доступ. Предоставьте интерфейс клиентам - Чтобы предоставить интерфейс для вашего сервиса, расширьте Service и внедрите onBind()

Определить интерфейс AIDL Этот файл определяет интерфейс программирования с сигнатурой метода. Интерфейс AIDL должен быть определен в файле.aidl. В нашем случае это IAdd.aidl с кодом ниже.

IAdd.aidl

package com.example.android_additionservice;
interface IAdd
{
int add(int num1, int num2);
}

Когда мы создаем наше приложение, Android SDK генерирует файл.java, соответствующий этому файлу.aidl с тем же именем, что и IAdd.java. Сгенерированный интерфейс включает в себя подкласс с именем Stub, который является абстрактной реализацией его родительского интерфейса и объявляет все методы из файла.aidl.

Реализация интерфейса (AdditionService.java) Чтобы реализовать интерфейс, сгенерированный из.aidl, расширьте сгенерированный интерфейс Binder и реализуйте методы, унаследованные от файла.aidl. В нашем случае нам нужно реализовать метод add здесь. Теперь mBinder является экземпляром класса Stub (Binder), который определяет интерфейс RPC для службы.

 private final IAdd.Stub mBinder = new IAdd.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
return (num1 + num2);
}
};

Предоставление интерфейса для клиентов (AdditionService.java) После реализации интерфейса нам необходимо предоставить его другим приложениям для доступа к нему. Для чего расширить сервис и реализовать onBind(), чтобы вернуть экземпляр вашего класса, который реализует сгенерированную заглушку.

public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
 return mBinder;
}

AdditionService.java

package com.example.android_additionservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import com.example.android_additionservice.IAdd;

public class AdditionService extends Service {
public IBinder onBind(Intent intent) {
 // TODO Auto-generated method stub
return mBinder;
} 


// IAdd definition is below  


private final IAdd.Stub mBinder = new IAdd.Stub() {
@Override



public int add(int num1, int num2) throws RemoteException {
// TODO Auto-generated method stub
return (num1 + num2);
}
};
}

Зарегистрировать службу в AndroidManifest.xml Поскольку серверное приложение является службой, давайте зарегистрируем это в файле AndroidManifest.xml.

Вот и все.. Мы сделали с приложением сервера.

Другие вопросы по тегам