【问题标题】:How to call a native interface function for IOS in codename one?如何在代号一中调用IOS的本机接口函数?
【发布时间】:2017-07-24 12:54:49
【问题描述】:

我阅读了以下原生界面指南。

https://www.codenameone.com/how-do-i---access-native-device-functionality-invoke-native-interfaces.html

https://www.codenameone.com/manual/advanced-topics.html#_native_interfaces

我进行了 Hello World 测试,在代号一文件中找不到 IOS 对本机接口的调用。 我做了 .h 和 .m 以及“生成本机访问”。在此之后,我无法退房继续。 我的意图是调用 IOS 原生的“从剪贴板复制”和“从剪贴板粘贴”。

IOS如何调用代号一的原生接口函数hello world?

我应该导入什么?

有没有完整的 IOS 和原生界面示例?

这些是我现在从教程中获得的文件。

好的,h文件的内容:

#import <Foundation/Foundation.h>

@interface com_mycompany_crtome_native_callsImpl : NSObject {
}

-(NSString*)helloWorld:(NSString*)param;
-(BOOL)isSupported;
@end

然后是m文件:

#import "com_mycompany_crtome_native_callsImpl.h"

@implementation com_mycompany_crtome_native_callsImpl

-(NSString*)helloWorld:(NSString*)param{
    NSLog(@"MyApp: %@", param);
    return @"Tada";
}

-(BOOL)isSupported{
    return YES;
}

@end

然后我有一个名为 native_calls.java 的额外 java 文件:

package com.mycompany.crtome;

import com.codename1.system.NativeInterface;

public interface native_calls extends NativeInterface {
    String helloWorld(String hi);
}

所以,我不知道如何从我的主 java 文件中调用它?

您能逐步解释一下函数和调用吗?

【问题讨论】:

  • 生成本机访问会创建 h 和 m 文件。目前还不清楚你被困在哪里。你的原生界面的内容是什么?原生端有什么问题,一般只需要编辑m文件即可。
  • 我添加了更多信息,非常感谢您的帮助。当我能理解发生了什么时,我会调用本机接口,这将是很好的。

标签: codenameone


【解决方案1】:

将原生接口绑定到 iOS 代码的代码是自动生成的。要使用本机接口,只需使用:

native_call n = NativeLookup.lookup(native_call.class);
if(n != null && n.isSupported()) {
   String result = n.helloWorld("Hi There");
}

【讨论】:

  • 主文件中是有东西要导入还是通过生成自动绑定的?
  • 它不工作。在这种情况下不执行查找。 native_calls n = NativeLookup.lookup(native_calls.class); if(n != null &amp;&amp; n.isSupported()) { String result = n.helloWorld("Hi There"); } 编译器说“找不到符号方法查找”
  • 如果我尝试使用Native_calls n = NativeLookup.create(native_calls.class); 编译器说:错误:类 native_calls 是公共的,应该在名为 native_calls.java 的文件中声明公共类 native_calls 实现 com.mycompany.crtome.cative_calls{.. ...我不知道该怎么做。
  • 在 Java 中,所有类都必须位于与类名对应且区分大小写的 java 文件中。您在 Java 中逆势而上,使用小写的类名来表示您可能在本机接口中犯的错误。它需要在一个完全命名为 native_calls.java 的文件中。
  • 好的,我改变了这个,没有编译器错误。问题是n.isSupported() 这不是真的,所以 n.helloWorld... 不会启动。而且没有 NativeLookup.lookup。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多