如何在没有上下文的情况下显示弹出消息

我们正在开发一个将在JVMAndroid使用的库。 现在我们需要实施试用期通知。 在其他平台(.Net和Mac)中显示弹出式消息框就足够了。 但到目前为止,我无法找到一种方法来为Android做到这一点。

问题是要显示一些消息(吐司或AlertDialog),我需要有一个实际的上下文。 但是由于我们的库不包含UI元素,并且不以任何方式与UI相关,所以我们不会要求用户在创建组件时传递上下文。

简而言之:

  • 如何在不具有从用户代码传递的上下文参考的情况下显示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。 最接近的变体是在用户应该实现的库中提供一些接口。

    链接地址: http://www.djcxy.com/p/60743.html

    上一篇: How to show popup message without having a context

    下一篇: Package MP3 data in HTTP for HTML5