在PhoneGap中调用Android的Java代码

October 9, 2013

在使用PhoneGap开发WebApp 的时候,需要使用 javascript 调用 native 的代码的时候,比如调用Android 的 Java 代码,这时候就需要使用 Cordova Plugin 这个东西。

Cordova Plugin 的官方文档这么解释的:A Cordova plugin bridges a bit of functionality between the WebView powering a Cordova application and the native platform the Cordova application is running on.

在JavaScript 里调用的方法:

cordova.exec(function(winParam){},function(error){},"service",
"action",["firstArgument","secondArgument",42,
false]);

function(winParam){} 成功的回调方法

function(error){} 失败的回调方法

"service" 一个字符串,也就是Plugin的名字(name)

"action" 一个字符串,一个service 可以有多个action

[ .. ] 一个javascript 数组,会传递给 native 层。

(1)在Java里,新建一个类,

package com.phonegap.helloworld;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

import android.content.Intent;
import android.net.Uri;

public class IntentPlugin extends CordovaPlugin{

public boolean execute(String action , JSONArray args , CallbackContext callbackContext)throws JSONException{
if(action.equals("start")){
String url = args.getString(0);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
cordova.startActivityForResult(this, intent, 1);
return true;
}
return false;
}
}

(2)在config.xml 文件里,加入


<feature name="IntentPlugin">
<param name="android-package" value="com.phonegap.helloworld.IntentPlugin">
</feature>

(3)在你需要调用的地方加入


cordova.exec(function(winParam){},function(error){},"IntentPlugin","start",[data.url]);

这样就可以简单的通过JavaScript 代码调用Android 的 Java 代码。

如果出现以下的错误,缺少cordova 这个对象。


D/CordovaWebViewClient(29868): onPageFinished(file:///android_asset/www/home.html#videoDetail)
D/CordovaActivity(29868): onMessage(onPageFinished,file:///android_asset/www/home.html#videoDetail)
D/CordovaLog(29868): file:///android_asset/www/js/home.js: Line 1381 : Uncaught ReferenceError: cordova is not defined

在 HTML 文件里加入下面代码


<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="cordova_plugins.js"></script>

--- EOF ---

添加新评论