うさがにっき

読書感想文とプログラムのこと書いてきます

ネイティブプラグインの作成

概要

CordovaからAndroidのネイティブを呼ぶためのプラグインを自作する

詳細

Java側のNative作成

CordovaPluginを継承する
executeメソッドをオーバーライド
各引数

action…javascriptが指定したプラグインのアクション名
args…javascriptから渡されるJSON形式の引数
callbackContext…javascriptへのcallback用のobject
public class MyFirstPlugin extends CordovaPlugin {

	@Override
	public boolean execute(String action, JSONArray args,
			CallbackContext callbackContext) throws JSONException {
		
		callbackContext.success();
		android.widget.Toast.makeText(this.cordova.getActivity(),
				args.getString(0), 2000).show();
		
		return true;
	}
	
}
javascript側実装
第一引数…呼び出し成功時に実行される関数
第二引数…呼び出し失敗時に実行される関数
第三引数…config.xmlに指定したプラグイン名
第四引数…呼び出すプラグインのアクション名(javaの第一引数と対応)
第五引数…ネイティブ側に渡すJSON配列
onDeviceReady: function() {
        cordova.exec(function() {
            console.log('success');
        }, function() {
            console.log('fail');
        }, 'MyFirstPlugin', 
        'actionName', 
        ['Hello my first Cordova Plugin']);
        
    },

platforms/android/res/xml/Config.xmlプラグインに関する情報を追記する

<feature name="MyFirstPlugin">
    <param name="android-package" value="com.example.hello.MyFirstPlugin" />
</feature>

…Toastが表示されない
どうやらplatforms/android/res/xml/Config.xmlが実行時に自動的に更新されて、追記した内容が消えている様子
なので、platforms/android/res/xml/Config.xmlではなくプロジェクト直下Config.xmlに下記を追記してみる

<!-- 最初に追記したものと同じ内容 -->
<feature name="MyFirstPlugin">
    <param name="android-package" value="com.example.hello.MyFirstPlugin" />
</feature>


無事表示された