Рубрики
Без рубрики

Поста для глубокого погружения AIDL не существует! Часть – I

Вступление Привет! Я собираюсь рассказать о парламентских беседах Android…. С тегами android, aidl, java, котлин.

Вступление

Привет! Я собираюсь рассказать о парламентских беседах 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.

Мы закончили с клиентской и серверной частями. На данный момент Услуга подключена из другого приложения. Мы можем выполнять любые операции, используя то же самое. У нас может быть передача данных, асинхронные вызовы, обратные вызовы. Более подробная реализация будет опубликована во второй части этой серии.

Исходный код IDL

Спасибо вам за чтение. Счастливого взаимодействия!! Теперь, чем

Оригинал: “https://dev.to/zeliotofficial/aidl-deep-dive-post-does-not-exist-part-i-4po8”