Cordova 4.0.0: exec() вызов неизвестного плагина
Я сгенерировал код, используя Cordova 4.0.0 CLI.
Сейчас я пытаюсь написать плагин для Android (MyPlugin) для выполнения нативного кода из веб-просмотра. Но каждый раз, когда я пытаюсь вызвать метод плагина, я получаю сообщение об ошибке:
exec () вызов неизвестного плагина
Я пробовал разные сопоставления в config.xml (а также создал plugin.xml). Но у меня ничего не работает. Также API не очень полезно.
Кто-нибудь знает, как это реализовать или что не так с моей реализацией?
Вот мой код:
com.cordovaDemo.MyPlugin.java
public class MyPlugin extends CordovaPlugin {
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
}
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
//MyCode
callbackContext.success(action);
return true;
}
index.html
<head>
...
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<title>Hello World</title>
<script>
window.func = function(str,callback){
cordova.exec(callback, function(err){alert(err)},"MyPlugin","echo", [str]);
}
function callPlugin(str){
window.func(str,function(){
alert("Done!");
});
}
</script>
</head>
<body>
<div class="app">
<div id="deviceready" class="blink">
<a onclick="callPlugin('Test')">Click me</a>
</div>
</div>
</body>
config.xml
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.touristmobile.cordovaDemo" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>CordovaDemo</name>
...
<content src="index.html" />
<access origin="*" />
<platform name="android">
<config-file target="config.xml" parent="/*">
<feature name="MyPlugin">
<param name="android-package" value="com.cordovaDemo.MyPlugin"/>
</feature>
</config-file>
</platform>
Редактировать:
Хорошо, я думаю, что теперь я понимаю основную идею плагинов Cordova. Плагин Cordova не зависит от "сгенерированного" приложения Android Wrapper.
В моем случае Cordova Webview должен быть расширением моего существующего приложения для Android, а Webview должен вызывать функции и отображать информацию из основного приложения. Вкратце: можно ли вызывать функции, расположенные в классах на том же уровне, что и моя CordovaActivity
2 ответа
Хорошо! Я решил это используя Cordova 3.6.4
Возможно встроенное веб-представление: я следовал этому руководству: http://cordova.apache.org/docs/en/4.0.0/guide_platforms_android_webview.md.html
В вашем плагине у вас должен быть файл js, использующий require, который экспортирует модуль (который должен соответствовать js-модулю, определенному в plugin.xml), исходный файл java, дополнительные ресурсы, если это необходимо, и самое важное, чтобы плагин мог творить чудеса: файл plugin.xml, который описывает структуру плагина, в котором вы определяете файлы для копирования (исходный файл) и модуль javascript (js-модуль).
Тогда вы используете cordova plugin add
указав путь к источнику вашего плагина, чтобы добавить плагин в ваш проект.
Я бы порекомендовал вам взглянуть на простой плагин Cordova, например, вибрацию, чтобы изучить структуру и создать свой собственный, изменив имена файлов, имена модулей..., удалите все о платформах, которые вы не хотите поддерживать (по крайней мере, это что сработало для меня) https://git-wip-us.apache.org/repos/asf?p=cordova-plugin-vibration.git;a=tree
Документы для справки: