- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试向现有的 iOS libGDX 应用程序添加功能(使用 RoboVM),以便当按下 scene2d.ui 按钮时,会显示 MFMailComposeViewController 弹出窗口,并附加一组预定义的 CSV 文件,这些文件存储在应用程序的 Library > 本地文件夹中。这是我到目前为止的代码:
进口和成员(member):
import org.robovm.apple.foundation.*;
import org.robovm.apple.messageui.MFMailComposeResult;
import org.robovm.apple.messageui.MFMailComposeViewController;
import org.robovm.apple.messageui.MFMailComposeViewControllerDelegate;
import org.robovm.apple.uikit.*;
import org.robovm.objc.ObjCObject;
private UIWindow mailWindow;
private UIViewController mailViewController;
private MFMailComposeViewController mailPicker;
方法:
private void createMailWindow()
{
mailWindow = new UIWindow(UIScreen.getMainScreen().getBounds());
mailViewController = new UIViewController();
mailWindow.setRootViewController(mailViewController);
}
private void sendEmail(String fileName, String subject, String body)
{
mailPicker = new MFMailComposeViewController();
mailPicker.addStrongRef(mailWindow);
String path = NSBundle.getMainBundle().getResourcePath();
if (fileName != null)
{
path = path.substring(0, path.lastIndexOf('/')) + "/Library/local/" + fileName;
}
MFMailComposeViewControllerDelegate delegate = new MFMailComposeViewControllerDelegate()
{
public void mailComposeControllerDidFinish(MFMailComposeViewController controller, MFMailComposeResult result, NSError error)
{
controller.dismissViewController(true, null);
mailPicker.removeFromParentViewController();
mailPicker.removeStrongRef(mailWindow);
mailWindow.setHidden(true);
mailPicker = null;
}
@Override
public void didFinish(MFMailComposeViewController controller, MFMailComposeResult result, NSError error)
{
}
};
mailPicker.setMailComposeDelegate(delegate);
mailPicker.addStrongRef((ObjCObject) delegate);
if (fileName != null)
{
// attach CSVs here...
}
mailPicker.setSubject((subject != null ? subject : "Test Results"));
mailPicker.setMessageBody((body != null ? body : "Please find attached the latest results data."), false);
if (MFMailComposeViewController.canSendMail())
{
mailWindow.getRootViewController().presentViewController(mailPicker, true, null);
mailWindow.makeKeyAndVisible();
}
}
}
我已经准备好了这段代码,并且在我尝试构建之前 Eclipse 不会标记任何问题,因此我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/robovm/rt/bro/NativeObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at com.mmu.cfa.DesktopMain.main(DesktopMain.java:26)
Caused by: java.lang.ClassNotFoundException: org.robovm.rt.bro.NativeObject
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 49 more
我已将 RoboVM Cocoa Touch 库和 RoboVM 运行时库添加到我的主项目的构建路径中。如果我删除这两种方法,我的项目构建不会出现错误。我还需要设置其他东西才能运行它吗?
最佳答案
在 Libgdx 应用程序中,主项目由所有支持平台的项目共享。
因此主项目必须包含平台无关的代码。
RoboVM Cocoa Touch 库和RoboVM 运行时库依赖于平台,仅适用于 iOS,不适用于桌面、android、html 等。
<小时/>创建一个界面,代表您在主项目中需要的功能。
public interface EmailHandler {
public void createMailWindow();
public void sendEmail(String fileName, String subject, String body);
}
使用您已编写的代码在 robovm 项目中创建一个实现类。
public class RobovmEmailHandler implements EmailHandler {
@Override
public void createMailWindow() {
// Your code goes here.
}
@Override
public void sendEmail(String fileName, String subject, String body) {
// Your code goes here.
}
}
将 EmailHandler
参数添加到 ApplicationListener
(主项目中的主游戏类)的构造函数。
public class MyAwesomeGame extends Game {
private EmailHandler emailHandler; // Use it wherever you like.
public MyAwesomeGame(EmailHandler emailHandler) {
this.emailHandler = emailHandler;
// Rest of constructor.
}
}
提供RobovmLauncher
(robovm项目的主类)中的实现参数。
public class RobovmLauncher extends IOSApplication.Delegate {
@Override
protected IOSApplication createApplication() {
EmailHandler emailHandler = new RobovmEmailHandler();
IOSApplicationConfiguration config = new IOSApplicationConfiguration();
return new IOSApplication(new MyAwesomeGame(emailHandler), config);
}
}
注意:
其他平台的项目会开始要求您向他们提供 EmailHandler
。这是自然的,也是意料之中的。您应该为您想要定位的每个平台提供特定于平台的接口(interface)实现。
希望这有帮助。
祝你好运。
关于java - libGDX/RoboVM 项目中的 MFMailComposeViewController 生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24294704/
首先,我非常感谢您对这里发布的疑问的支持和回应。 我正在开发一个需要访问图库和相机的应用程序,因为它有一个用户配置屏幕。 我相信我对如何使用 RoboVM 完成这样的事情有足够的研究,并发现: Wha
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
每次运行使用 libgdx/robovm 构建的应用程序时,我都会遇到问题。构建成功,但每次打开应用程序时,我都会得到以下堆栈跟踪: java.lang.NoClassDefFoundError: o
我有一个使用 libGDX 开发并使用 robovm 移植到 iOS 的应用程序。这是完美的工作。然后我更新了我的配置文件以允许导出到另一台设备。执行此操作时,我现在得到 2 个在 robovm 中列
我正在尝试将我的 libgdx 游戏导出到 .ipa。首先我得到这样的错误: No signing identity found matching 'iPhone Distribution: Alon
我想在 roboVM 项目中定义一个观察者。为此,我使用键值观察器功能。这是我的代码: button.setTitle("Click me!", UIControlState.Normal);
我一直很感兴趣地关注用于 iOS 开发的 RoboVM。有人可以向我指出在 iOS 上运行时您的 JavaFX(或您使用的任何技术)的限制吗? 比如,你会用Spring吗?我想这永远不可能,因为 Ro
我想知道如何使用 RoboVM 在 Java 中检查手机是否正在充电。没什么好说的,问题很简单。 最佳答案 我自己找到了问题的答案。以下是在 RoboVM 中获取电池状态的方法: UIDeviceBa
我已经安装了 robowm 并创建了官方网站上提供的示例应用程序。 它在 3.5 英寸屏幕尺寸的模拟器上完美运行,但当我使用 4 英寸模拟器或 iPhone 5 测试时,屏幕顶部和底部出现黑条。 ro
如果我使用任何非空参数调用以下 RoboVM 方法: public static void runOnUiThread(final Runnable runnable) { System.ou
我希望这是问这个问题的正确地方: 我一直在尝试通过 RoboVM (libGDX) 让 chartboost 在 iOS 上工作我正在使用 RoboVM 的 Mobidevelop 分支,所以我现在唯
这是我的问题.. 直到今天早上我收到苹果支持团队的一封电子邮件说我有(预安装的)的 xcode 受到损害,所以为了缩短事情我不得不重新安装x代码。在这样做并更新 android studio 的 ro
我可以使用 LibGDX 0.9.9 和 RoboVM 0.0.7 编译和运行我的游戏 我已经能够为应用程序商店提交构建一个 ipa。使用 Application Loader 上传我的应用程序时,我
我正在尝试配置 RoboVM 来为 iOS 构建我的 LibGDX 项目。 在我的build.gradle project(":ios") { apply plugin: "java"
我搜索了一下,发现编辑 build.gradle 是这样的 project(":ios") { apply plugin: "robovm" ..... robovm {
我正在尝试将 Google Analytics RoboVM 绑定(bind)实现到我的项目中。 我尝试使用从 http://libgdx.badlogicgames.com/robovm-ios-b
我正在使用 Robovm 开发 ios 移动应用程序。我需要在我的应用程序中使用 Firebase。有没有办法在 Robovm 中使用 Firebase? 最佳答案 更新:我们已将 Firebase
我正在尝试使用 httpurlconnection 从 Facebook 下载头像图像。这在安卓上运行良好。如果我从非 SSL 服务器下载任意图像,它也可以在 iOS 上使用 robovm 运行。如果
我正在尝试导入 RoboVM 绑定(bind)以在我的项目中实现 mopub,但是当我尝试“构建模型”时遇到了问题。我尝试将其导入为 gradle 项目,但是当我构建它时,出现错误: "Error i
我有一款使用 LibGDX 的安卓游戏。在其中,我有一些用于在浏览器中打开 URL 的按钮: Intent intent = new Intent(Intent.ACTION_VIEW, Uri.pa
我是一名优秀的程序员,十分优秀!