gpt4 book ai didi

robovm - 使用 RoboVM 访问图库和相机

转载 作者:行者123 更新时间:2023-12-02 01:49:46 26 4
gpt4 key购买 nike

首先,我非常感谢您对这里发布的疑问的支持和回应。
我正在开发一个需要访问图库和相机的应用程序,因为它有一个用户配置屏幕。
我相信我对如何使用 RoboVM 完成这样的事情有足够的研究,并发现:
What is startActivityForResult analogue in RoboVM?
https://groups.google.com/forum/#!topic/robovm/BX5MsTF1tws
https://groups.google.com/forum/#!topic/robovm/CZR4KwTBlkg
但是当我实现它时:
ImagePicker.java:

package com.demo.app.interfaces;
public interface ImagePicker {
/**
* Open cam
*/
void startPreview();
/**
* Return bytes
* @return
*/
byte[] getBytes();

/**
* Event after saved
*/
void pictureJustSaved();
/** Opens gallery
void openGallery();
}
MyImagePickerController.java:
package com.demo.app;
import org.robovm.apple.uikit.UIImagePickerController;
import org.robovm.apple.uikit.UIInterfaceOrientation;
public class MyImagePickerController extends UIImagePickerController {
public boolean shouldAutorotate() {
return false;
}
public UIInterfaceOrientation getPreferredInterfaceOrientation() {
return UIInterfaceOrientation.Portrait;
}
}
IOSLauncher.java:
package com.demo.app;
import org.robovm.apple.foundation.NSAutoreleasePool;
import org.robovm.apple.foundation.NSDictionary;
import org.robovm.apple.foundation.NSString;
import org.robovm.apple.uikit.UIApplication;
import org.robovm.apple.uikit.UIImage;
import org.robovm.apple.uikit.UIImagePickerController;
import org.robovm.apple.uikit.UIImagePickerControllerDelegate;
import org.robovm.apple.uikit.UIImagePickerControllerSourceType;
import org.robovm.apple.uikit.UIInterfaceOrientation;
import org.robovm.apple.uikit.UINavigationController;
import org.robovm.apple.uikit.UINavigationControllerOperation;
import org.robovm.apple.uikit.UIViewController;
import org.robovm.apple.uikit.UIViewControllerAnimatedTransitioning;
import org.robovm.apple.uikit.UIViewControllerInteractiveTransitioning;
import org.robovm.objc.ObjCObject;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.iosrobovm.IOSApplication;
import com.badlogic.gdx.backends.iosrobovm.IOSApplicationConfiguration;
import com.demo.app.interfaces.ImagePicker;
import com.demo.app.screens.App;
public class IOSLauncher extends IOSApplication.Delegate implements ImagePicker {
byte[] byteArray = null;
@Override
protected IOSApplication createApplication() {
IOSApplicationConfiguration config = new IOSApplicationConfiguration();
return new IOSApplication(new App(this, null, null, null), config);
}
public static void main(String[] argv) {
NSAutoreleasePool pool = new NSAutoreleasePool();
UIApplication.main(argv, null, IOSLauncher.class);
pool.close();
}
@Override
public void openGallery() {
System.out.println("I am here: Open Gallery iOS");
// Gallery
UIViewController controller = ((IOSApplication) Gdx.app).getUIViewController();
MyImagePickerController imagePicker = new MyImagePickerController();
controller.addChildViewController(imagePicker);
controller.getView().addSubview(imagePicker.getView());
imagePicker.getView().setBounds(controller.getView().getBounds());
imagePicker.setSourceType(UIImagePickerControllerSourceType.PhotoLibrary);
UIImagePickerControllerDelegate delegate = new UIImagePickerControllerDelegate(){
@Override
public void willShowViewController(
UINavigationController navigationController,
UIViewController viewController, boolean animated) {
// TODO Auto-generated method stub
}
@Override
public void didShowViewController(
UINavigationController navigationController,
UIViewController viewController, boolean animated) {
// TODO Auto-generated method stub
}
@Override
public long getSupportedInterfaceOrientations(
UINavigationController navigationController) {
// TODO Auto-generated method stub
return 0;
}
@Override
public UIInterfaceOrientation getPreferredInterfaceOrientation(
UINavigationController navigationController) {
// TODO Auto-generated method stub
return null;
}
@Override
public UIViewControllerInteractiveTransitioning getInteractionController(
UINavigationController navigationController,
UIViewControllerAnimatedTransitioning animationController) {
// TODO Auto-generated method stub
return null;
}
@Override
public UIViewControllerAnimatedTransitioning getAnimationController(
UINavigationController navigationController,
UINavigationControllerOperation operation,
UIViewController fromVC, UIViewController toVC) {
// TODO Auto-generated method stub
return null;
}
@Override
public void didFinishPickingImage(UIImagePickerController picker,
UIImage image, NSDictionary<NSString, ?> editingInfo) {
// TODO Auto-generated method stub
}
@Override
public void didFinishPickingMedia(UIImagePickerController picker,
NSDictionary<NSString, ?> info) {
// TODO Auto-generated method stub
}
@Override
public void didCancel(UIImagePickerController picker) {
// TODO Auto-generated method stub
}};
imagePicker.setDelegate(delegate);
imagePicker.addStrongRef((ObjCObject) delegate);
}
@Override
public void startPreview() {
// Cam
}
@Override
public byte[] getBytes() {
// TODO Auto-generated method stub
return byteArray;
}
@Override
public void pictureJustSaved() {
byteArray = null;

}
}
当我尝试打开图库时:
Folder on...
I am here: Open Gallery iOS
Exception in thread "main" java.lang.ClassCastException: com.demo.app.IOSLauncher$1 cannot be cast to org.robovm.objc.ObjCObject
at org.robovm.objc.ObjCObject$Marshaler.protocolToNative(ObjCObject.java)
at org.robovm.apple.uikit.UIImagePickerController.$m$super$setDelegate$(Native Method)
at org.robovm.apple.uikit.UIImagePickerController.setDelegate(UIImagePickerController.java)
at com.demo.app.IOSLauncher.openGallery(IOSLauncher.java)
at com.demo.app.screens.KidsManagerScreen$8.touchUp(KidsManagerScreen.java)
at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java)
at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java)
at com.badlogic.gdx.backends.iosrobovm.IOSInput.processEvents(IOSInput.java)
at com.badlogic.gdx.backends.iosrobovm.IOSGraphics.draw(IOSGraphics.java)
at com.badlogic.gdx.backends.iosrobovm.IOSGraphics$1.draw(IOSGraphics.java)
at org.robovm.apple.uikit.UIView.$cb$drawRect$(UIView.java)
at org.robovm.apple.uikit.UIApplication.main(Native Method)
at org.robovm.apple.uikit.UIApplication.main(UIApplication.java)
at com.demo.app.IOSLauncher.main(IOSLauncher.java)
请问你能帮帮我吗?我搞不清楚了!

最佳答案

谢谢你给我看门。我设法通过为 UIImagePickerControllerDelegate 创建一个单独的类来解决您的异常,该类扩展了 UINavigationControllerDelegateAdapter。您定义的匿名内部类是 java.lang.Object 的扩展,这就是您收到此异常的原因。因此,类定义应如下所示:

public class AppleUIImagePickerControllerDelegate extends UINavigationControllerDelegateAdapter implements UIImagePickerControllerDelegate 

关于robovm - 使用 RoboVM 访问图库和相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552795/

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