Nano Hash - криптовалюты, майнинг, программирование

Android: невозможно выполнить трансляцию из вспомогательного модуля в основное приложение. Это вообще выполнимо?

У меня есть основное приложение, мы называем его «приложение», а затем дополнительные модули, называемые «модуль1» и «модуль2». Эти модули являются зависимостями приложения. «Приложение» запускает «модуль 1», который выполняет свою работу и после завершения передает сообщение, которое должно быть получено «приложением», чтобы оно могло продолжить свой поток. Однако, похоже, я не получаю его в «приложении».

Мне интересно, можно ли вообще отправлять широковещательные сообщения из подмодулей?

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

Трансляции работают нормально внутри модуля.

Код довольно прост:

public class MyReceiver extends BroadcastReceiver {

mFilter = new IntentFilter("com.myapp.main.CUSTOM_INTENT");
mReceiver = new MyReceiver();

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(Constants.TAG, "receiver worked");
    }

    // constructor
    public MyReceiver(){

    }
}

И в манифесте:

<receiver android:name=".MyReceiver">
        <intent-filter>
            <action android:name="com.myapp.main.CUSTOM_INTENT" />
        </intent-filter>
    </receiver>

И в подмодуле:

Intent intent = new Intent("com.myapp.main.CUSTOM_INTENT");
            intent.putExtra("value", 0);
            sendBroadcast(intent);
12.02.2016

  • Мне интересно, можно ли вообще отправлять широковещательные сообщения из подмодулей? -- да, хотя вы должны на самом деле использовать LocalBroadcastManager или другую форму внутрипроцессной шины событий (например, EventBus от greenrobot, Otto от Square) для повышения производительности, безопасности и простоты. 12.02.2016
  • Я тоже попробовал LocalBoradcastManager из этого ответа, но это не сработало: stackoverflow.com/questions/8802157/ 12.02.2016
  • В моем эксперименте Context.sendBroadcast работает, но LocalBroadcastManager.sendBroadcast не работает между модулями. 02.02.2017

Ответы:


1

Просто укажите компонент с полным путем к вашему приемнику и его пакету

Intent intent = new Intent("com.myapp.main.CUSTOM_INTENT");
intent.putExtra("value", 0);
intent.setComponent(new ComponentName(com.pkg","com.pkg.MyReceiver"));

sendBroadcast(intent);

Удивительно, но на некоторых устройствах приемник срабатывает без компонента настройки.

13.04.2018

2

Как насчет использования интерфейсов? Вы можете объявить интерфейс в своем модуле как:

public class Module1 {
private SessionManager manager;

public interface SessionManager
{
    void onTaskFinished();
}

// in the method to start Module1 something like:

public void startModule(SessionManager manager){
    this.manager = manager;
    //DO STUFF
         ...
    manager.onTaskFinished();
}

реализовать интерфейс в классе хост-приложения, запускающего Module1:

public class App implements SessionManager {
    void launchModule1(){
        Module1.startModule(this);
    }
    void onTaskFinished(){
        Module2.start();
    }
12.02.2016
  • Я пытаюсь сделать это в обратном порядке, т.е. модули будут вызывать методы в вызывающем приложении. 12.02.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..