Как показать всплывающее сообщение без контекста

Мы разрабатываем библиотеку, которая будет использоваться как в JVM и в Android . И теперь нам нужно внедрить уведомление о пробном периоде. На других платформах (.Net и Mac), показывающих всплывающее окно сообщения, было достаточно. Но пока я не могу найти способ сделать это для Android.

Проблема в том, что для отображения некоторого сообщения (тост или AlertDialog) мне нужен реальный контекст. Но поскольку наша библиотека не содержит элементов пользовательского интерфейса и никак не связана с пользовательским интерфейсом, мы не просим пользователя передавать контекст при создании компонентов.

Короче:

  • Как я могу показать Toast (AlertDialog, Notification), не имея контекстной референции, переданной из кода пользователя.
  • Если я не могу, возможно, у кого-то есть лучшие решения для внедрения пробного режима на Android и Java.

    Используйте абстрактный шаблон фабрики .

    Ваш абстрактный завод позволит вам создавать диалоги и другие уведомления. Тогда у вас будет 2 конкретных реализации, которые создадут версию Android или версию уведомления JVM.

    Пример:

     /* * The abstract factory */ public abstract class NotificationFactory { /** * Pops a message up for the user. * * @param msg */ public abstract void newToast(String msg); // other notifications can go here } /** * Concrete Android notification factory * */ public final class AndroidNotificationFactory extends NotificationFactory { private final Context context; public AndroidNotificationFactory(Context context) { this.context = context; } @Override public void newToast(String msg) { // normal Android toast stuff using the context } } /** * Concrete JVM Notification factory * */ public final class JvmNotificationFactory extends NotificationFactory { @Override public void newToast(String msg) { // JVM toast stuff } } /** * A singleton used for accessing the factory. * */ public enum Library { Instance; private NotificationFactory notificationFactory; public NotificationFactory getNotificationFactory() { // nb: add synchronized if needed return notificationFactory; } public void setNotificationFactory(NotificationFactory notificationFactory) { // nb: add synchronized if needed this.notificationFactory = notificationFactory; } public void InitForAndroid(Context context) { setNotificationFactory(new AndroidNotificationFactory(context)); } public void InitForJvm() { setNotificationFactory(new JvmNotificationFactory()); } } public class ExampleUsage { /** * @param args */ public static void main(String[] args) { // init the library // Library.Instance.InitForAndroid(context); //or: Library.Instance.InitForJvm(); // usage Library.Instance.getNotificationFactory().newToast("Test"); } } 

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

    Похоже, вы действительно не можете показать ни Toast, ни AlertDialog без контекста. Самый близкий вариант – предоставить некоторый интерфейс в вашей библиотеке, который пользователь должен реализовать.

    Intereting Posts
    Android / layout: как создать компоновку заголовка Отображение ошибок DialogFragments ICS Как сделать макет изображения и текста слева и под ним? Дифференцирование отладочной и производственной сборки приложения для Android Чтение и запись Календарь Повторить задачу с задержкой? Получить горизонтальную и вертикальную точность в устройстве Android Проблема с трансфокацией текста WebView в Android Почему jQuery Mobile 1.1-rc1 использует значок .gif для значка загрузки (снова)? Сохранение ArrayList карты Hash Смешайте две текстуры с разными координатами и размерами в одном и том же шейдере Есть ли у нас возможность прекратить запрос в OkHttp Interceptor? Есть ли способ создать слайдер предварительного просмотра в android В Android -How прямо после tweet для следующих пользователей пользователя аутентификации в android без открытого диалога Tweet (диалоговое окно сообщений) Как отменить службу переднего плана от использования уведомления (удалите салфетки) или удалить все уведомления?