在Codename中访问和使用一个本机Android类

时间:2014-12-22 10:02:56

标签: android codenameone

我知道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代码正常运行。

感谢。

2 个答案:

答案 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;
}