Вступление
Привет! Я собираюсь рассказать о парламентских беседах Android. Что я имею в виду под этим? Я имею в виду IPC (межпроцессное взаимодействие), которое происходит внутри системы Android. Мы собираемся использовать AIDL для так называемого “разговора”. Я объясню лучше и глубже в этой статье.
Мы все это знаем!
Почему это совершенно новый пост? Потому что речь идет не о IPC компонентов внутри одного приложения для Android. Речь идет о взаимодействии двух разных приложений. Большинство людей согласны с тем, что понять Спид довольно легко. Но, есть высказывание (мое), "Если вы понимаете интерфейсы в ООП, вы поймете AIDL!" . Что ж, давайте посмотрим, что на самом деле означает это высказывание, в деталях.
Помощник отодвинул засов.
Язык определения интерфейса Android (AIDL) – это то, что вы каждый раз используете в Google AIDL. Это не объясняет, что это такое на самом деле. Позвольте мне объяснить! AIDL – это реализация Android для обеспечения межпроцессной связи (IPC) между компонентами Android. Погружаясь глубоко, есть программа под названием aid , которая компилирует исходный код IDL и генерирует клиент (прокси) и сервер (заглушку) Интерфейсы Java.
Начальные строительные блоки.
Давайте начнем с основ. Чтобы создать AIDL, нам нужно открыть проект Android и нажать Файл -> Создать -> AUDI -> Файл AIDL . Напишите свой файл первой ПОМОЩИ.
interface IMyAidlInterface {
String getMessage();
}
Затем не забудьте Построить -> Перестроить . Будет создан I Мой интерфейс Aidl класс. Создайте класс, который расширяет интерфейс электронной почты. Заглушка . Пожалуйста, не забудьте переопределить метод GetMessage() в этом классе.
public class MyImplementor extends IMyAidlInterface.Stub {
@Override
public String getMessage() {
return "Hello from AIDL Stub!";
}
}
После того, как мы расширили класс заглушки и реализовали (переопределили) метод, мы должны создать Службу, которая будет предоставлять API-интерфейсы приложениям, которым необходимо привязать функции AIDL.
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MyImplementor();
}
}
Кроме того, добавьте тег в AndroidManifest.xml внутри <приложение> тега.
Теперь, когда мы внедрили сервисную часть, нам следует продолжить и создать еще один проект Android для клиентской части. Пожалуйста, обратите внимание, что вспомогательные средства очень чувствительны к регистру . К сожалению, Android Studio недостаточно развита для обнаружения синтаксических ошибок в файле AIDL. Любые изменения в файле AIDL потребуют перестройки проекта.
Настоящая река, которую нужно пересечь!
Мы закончили с серверной (сервисной) частью. Теперь мы должны создать другое приложение, которое будет нашей клиентской частью. Итак, создайте новый проект в Android Studio. После создания проекта мы должны сделать одну из самых важных вещей.
В Android Studio выберите представление проекта в левом верхнем меню. Внутри приложения/src/main/ создайте папку под названием помощь .
После этого перейдите в приложение службы AIDL и скопируйте содержимое папки aidl .
Вернитесь в клиентское приложение и вставьте содержимое в папку aidl . Построить -> Перестроить . Проект должен быть построен без каких-либо ошибок.
Перейти к MainActivity.java и создайте Соединение с сервисом объект и Интерфейс электронной почты
private IMyAidlInterface iMyAidlInterface;
private final ServiceConnection mServiceConnection =
new ServiceConnection() {
@Override
public void onServiceConnected(
ComponentName name, IBinder service) {
iMyAidlInterface =
IMyAidlInterface.Stub.asInterface(service);
Log.d(TAG, "Service Connected.");
Toast.makeText(MainActivity.this, "Service Connected.", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceDisconnected(ComponentName name) {
iMyAidlInterface = null;
Toast.makeText(MainActivity.this, "Service Disconnected.", Toast.LENGTH_SHORT).show();
}
};
В onCreate() из MainActivity.java , свяжите службу. Обратите внимание, что нам нужно действие и имя пакета для успешной привязки к службе.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setPackage("com.zeliot.aidldemo");
intent.setAction("MyService");
bindService(intent, mServiceConnection, BIND_AUTO_CREATE);
}
Теперь создайте кнопку и, нажимая на кнопку, вызовите i Мой интерфейс Aidl.GetMessage() , чтобы получить строку из службы AIDL.
Мы закончили с клиентской и серверной частями. На данный момент Услуга подключена из другого приложения. Мы можем выполнять любые операции, используя то же самое. У нас может быть передача данных, асинхронные вызовы, обратные вызовы. Более подробная реализация будет опубликована во второй части этой серии.
Спасибо вам за чтение. Счастливого взаимодействия!! Теперь, чем
Оригинал: “https://dev.to/zeliotofficial/aidl-deep-dive-post-does-not-exist-part-i-4po8”