我是PhoneGap的新手,我能够使用PhoneGap实现基本应用程序,现在进一步增强它,我想将PhoneGap与Android活动连接,基本上我计划使用javascript函数调用startActivity()方法
我尝试了Communication between Android Java and Phonegap Javascript?
但是我没有调用某个活动,导致强制关闭错误。 帮帮我,等待回复!
答案 0 :(得分:26)
在不使用任何插件的情况下调用任何Java Native代码调用。
按照以下步骤操作。
将以下代码替换为现有的DroidGap活动。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init(); // Calling this is necessary to make this work
appView.addJavascriptInterface(this, "MainActivity");
/* "this" points the to the object of the current activity. "MainActivity" is used to refer "this" object in JavaScript as in Step 3. */
super.loadUrl("file:///android_asset/www/index.html");
}
在当前(this)活动中添加自定义函数,如下所示。
public void customFunctionCalled() {
Log.e("Custom Function Called", "Custom Function Called");
}
现在从您的HTML / JavaScript代码中调用此函数,如下所示。
<script type="text/javascript">
function callNewActivity() {
window.MainActivity.customFunctionCalled();
}
</script>
这会在customFunctionCalled()
中调用MainActivity
。
经过测试的环境 Eclipse - 3.7.2 Android 2.2模拟器 PhoneGap - 2.0.0
请在此处提供您的评论以改进博客帖子。 http://phonegapexplorers.blogspot.in/2012/08/call-native-java-code-phonegap-android.html
答案 1 :(得分:2)
很难知道你正在努力做的事情,但是在编写插件的道路上可能是要走的路。退房;
http://smus.com/android-phonegap-plugins
这个插件可能对你有用,或者你自己如何做好指示。
答案 2 :(得分:0)
尝试创建插件,这里有一些插件示例https://github.com/phonegap/phonegap-plugins
答案 3 :(得分:0)
我尝试过你之前尝试做的事情,将phonegap更新到2.0.0及更高版本,最好的方法是使用插件。这是资产文件夹中的phonegap上的js。确保构造id为“nativecall”的div元素和一个检测它的示例按钮。确保观察LogCat以检查错误消息。
window.echo = function(str, callback) {
cordova.exec(callback, function(err) {
callback('Nothing to echo.');
}, "Echo", "echo", [str]);
};
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function() {
var abiter = $('#nativecall').html();
$("#abutton").click(function () {
window.echo(abiter, function(echoValue) {
alert(echoValue = abiter); // should alert true.
});
});
}
};
app.initialize();
在src上添加服务名称为“Echo”的新类方法。
package org.apache.cordova.plugin;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.plugin.AndroidActivities;
import org.apache.cordova.api.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
/**
* This class echoes a string called from JavaScript.
*/
public class Echo extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("echo")) {
String message = args.getString(0);
new AndroidPublicFunction(message); //call function from AndroidActivities
this.echo(message, callbackContext);
return true;
}
return false;
}
private void echo(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
callbackContext.success(message);
} else {
callbackContext.error("Expected one non-empty string argument.");
}
}
}