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。これは機能していないように見える部分です。ここで ContentView を設定しようとしましたが、うまくいきません。また、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) Cordova は、JS ファイルで cordova にする必要があります。

2) BreakitPlugin が実際にパッケージ "com.example.breakitwebapp" にあると仮定すると、プラグイン行は次のようになります。

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

プラグインの名前は、codova.exec で使用する名前と一致する必要があります。

3) 「createNavigationBar」が Java で呼び出されることはありません。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 コールバックが呼び出されることはありません。あなたの例では両方とも null であることに注意してください。

于 2012-07-11T20:18:22.607 に答える