我知道Codename One和Android是完全不同的框架。但问题是,如何从原生Android访问Codename One类?
例如:我想创建一个名为onCreat()
的方法,如下所示:
public void onCreate(Bundle savedInstanceState){}
在Android中,您必须导入包import android.os.Bundle;
如何在代号One中集成此软件包(适用于onCreat()
)和Android中的其他软件包?
我应该在Code Name One中设置什么才能访问这些类。这可能吗?
修改
另一个例子:
import android.net.Uri;
public void startWeb(View v) {
Uri uri = Uri.parse("http://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
如何在Codename One中转换此Android代码,使其看起来像这样,如果我点击按钮,则有效:
protected void onMain_Button6Action(Component c, ActionEvent event) {
Uri uri = Uri.parse("http://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
关键是我想了解如何使Codename One的Android代码正常运行。
感谢。
答案 0 :(得分:2)
您需要使用native interfaces来访问Android本机功能。但是,onCreate调用是一种特殊情况,因为它是从Android应用程序的生命周期回调的,并且将被调用以启动Codename One启动/初始化方法,并且不会调用您的代码。
要收听这些生命周期调用,您可以使用AndroidNativeUtil类,该类具有生命周期侦听器,允许您从本机接口访问这些功能。
答案 1 :(得分:0)
包com.mycompany.ecopay;
import android.content.Intent;
import android.net.Uri;
import com.codename1.impl.android.AndroidNativeUtil;
import com.codename1.impl.android.CodenameOneActivity;
public class NativeAccessImpl {
public void pay() {
com.codename1.impl.android.AndroidNativeUtil.getActivity().runOnUiThread(new
Runnable() {
public void run() {
// your code goes here
CodenameOneActivity aActivity = (CodenameOneActivity)
AndroidNativeUtil.getActivity();
android.content.Intent intent = new
android.content.Intent(Intent.ACTION_CALL, Uri.parse("tel:0779083353"));
aActivity.startActivity(intent);
}
});
}
public boolean isSupported() {
return true;
}