gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:15 27 4
gpt4 key购买 nike

我们正在开发一个将在 JVMAndroid 中使用的库。现在我们需要实现试用期通知。在其他平台(.Net 和 Mac)中显示弹出消息框就足够了。但到目前为止,我找不到在 Android 上执行此操作的方法。

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

简而言之:

  • 如何在没有从用户代码传递上下文引用的情况下显示 Toast(AlertDialog、Notification)。
  • 如果我做不到,也许有人有更好的解决方案来在 Android 和 Java 上实现试用模式。

最佳答案

使用Abstract factory pattern .

您的抽象工厂将允许您创建对话框和其他通知。然后您将有 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 接口(interface)以及实现该接口(interface)的具体 Android 和 JVM 包装器。

关于android - 如何在没有上下文的情况下显示弹出消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com