0

我是 Android 和电话差距的新手,我正在尝试同时学习两者。下面我不仅尝试创建一个插件,还尝试查看控制从一个部分到另一个部分的流程。你不仅可以告诉我为什么我的应用程序没有输出我认为它应该输出的内容,而且你可以质疑我的逻辑并清楚我是否做错了。这是我想要做的

1:首先我有从 DroidGap 扩展的“MainActivity.java”

public class MainActivity extends DroidGap {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.loadUrl("file:///android_asset/www/index.html");    
}
}

2:如您所见,我正在从我的 java 类中调用 index.html。所以,这里是'index.html'。

<!DOCTYPE html>
<html>

  <head>
  <title></title>

    <script type="text/javascript" charset="utf-8" src="cordova-1.9.0.js"></script>
    <script type="text/javascript" charset="utf-8" src="BreakitPlugin.js"></script>
    <script type="text/javascript">
function onBodyLoad()
{       
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady()
{
    window.plugins.breakitPlugin.createNavigationBar();
}
</script>
</head>
<body onload="onBodyLoad()">
</body>
</html>

3:然后是脚本文件

function BreakitPlugin() {    } 

BreakitPlugin.prototype.createNavigationBar = function() {
cordova.exec(null, null, "BreakitPlugin", "createNavigationBar", []); // Edited the fifth parameter
};

cordova.addConstructor(function(){
cordova.addPlugin("breakitPlugin", new BreakitPlugin());
});

4:然后是最重要和最关键的部分 从插件扩展而来的plugin.java。这是似乎不起作用的部分。我在这里尝试过设置内容视图,但它不起作用。我也尝试过 log 命令,但运行时没有显示相应的日志语句。所以,这个类中的两个函数似乎都没有被调用。顺便说一句,我的 '.html' 和 '.js' 中有 'alert' 语句,它似乎得到了正确的警告。这是代码。

public class BreakitPlugin extends Plugin {
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
    PluginResult.Status status = PluginResult.Status.OK;
            String result = "";
    Log.i("Execute", "Log Cat");

    if (action.equals("createNavigationBar")) {

        this.createNavigationBar();
    }
    else {
        status = PluginResult.Status.INVALID_ACTION;
    }
    return new PluginResult(status, result);
}
public void createNavigationBar() {
    //Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.vogella.com")); 
    //Activity act = new Activity();
    //act.setContentView(R.layout.activity_main);
    Log.i("Create navigation bar", "Log Cat");
}
}
4

1 回答 1

2

好吧,我可以立即看到一些错误的地方:

1)科尔多瓦应该是科尔多瓦在你的JS文件中。

2) 假设 BreakitPlugin 确实在包“com.example.breakitwebapp”中,那么你的插件行应该是:

<plugin name="BreakitPlugin" value="com.example.breakitwebapp.BreakitPlugin"/>

插件的名称必须与您在 codova.exec 上使用的名称相匹配。

3) 在 Java 中永远不会调用“createNavigationBar”。您必须在 exec 中执行此操作:

public PluginResult execute(String action, JSONArray args, String callbackId) {
    if ("createNavigationBar".equals(action) {
        Log.i("Log Cat", "Create navigation bar");
        this.createNavigationBar();
    }
    return null;
}

4)除此之外,您不会返回 PluginResult,因此不会调用 onSuccess 或 onFailure 回调。请注意,在您的示例中它们都是空的。

于 2012-07-11T20:18:22.607 回答