我有一个添加了javascript界面的webview,在大多数设备上都能正常运行,除了那些运行Android 4.2.1的设备.
我删除了大部分代码,并保留了一个非常基本的代码:
this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new WebChromeClient());
this.webView.addJavascriptInterface(new Object() {
public void handshake() {
Log.d("JS", "handshake no params");
}
public void handshake(String json) {
Log.d("JS", "handshake with params: " + json);
}
}, "Android");
Run Code Online (Sandbox Code Playgroud)
在javascript方面,测试代码如下所示:
Android.handshake();
Run Code Online (Sandbox Code Playgroud)
但是我在logcat中得到了这个:
E/Web控制台:未捕获TypeError:对象[对象对象]没有方法'握手'
同样,在我测试过的较旧的android os(<4.2.1)(最小版本为2.3.3)的设备中,这同样适用.
奇怪的是,如果我开始一个全新的项目,除了一个只有一个WebView的Activity,使用相同的代码,一切都可以正常工作,即使对于4.2.1,但当它是我的实际项目的一部分,事情中断.我正在使用的webview没有做任何事情,我提供的代码片段中没有包含这些内容.
对我来说最奇怪的是,javascript找到了Android对象,但它只是没有请求的方法(握手),怎么会这样呢?
任何帮助将不胜感激,因为这在过去的两周左右让我疯狂(这是一个我一直回去的错误,然后放弃等等).谢谢.
我正在使用jQuery Mobile和PhoneGap创建一个Web应用程序.有一个图表,如果用户使用大屏幕,我想在此图表上显示更多点,因为点是可点击的,并且不应该太近(物理上).
例如:如果有人有iPhone,我想在折线图上显示N个点.如果他有一台iPad,我想显示2xN分(因为iPad的屏幕体积更大),但如果他有一些像iPhone一样体积小的新手机,但屏幕上有很多像素(如iPad),我想要显示N个点,因为这些点在物理上很小(并且更靠近在一起).
那么有没有办法获得这些数据?另一种方法是确定设备是否为平板电脑.
有没有办法以编程方式暂停Phonegap中的Android应用程序?我想模仿按下HOME按钮时发生的行为.我已经不得不使用这个来覆盖后退按钮处理程序,而在大多数情况下我希望它执行我的操作,当在特定状态下用户希望应用程序最小化时,我想复制此行为.
请记住,在Android上,这与关闭应用程序不同.这很容易做到,device.exitApp();但我希望它能记住它的状态并继续在后台运行.特别是如果仍然在后台完成异步作业.
Phonegap中是否有一项功能可以实现这一目标?
可能重复在Android Phonegap中手动暂停应用程序,但是我找不到OP提到的那些工具navigator,所以我很清楚完全编辑和重写他们的帖子
我是PhoneGap的新手,我可以用PhoneGap实现基本应用程序,现在进一步增强它,我想将PhoneGap与Android活动连接,基本上我打算使用javascript函数调用startActivity()方法.
我尝试过Android Java和Phonegap Javascript之间的通信?
但是我没有召唤一个活动,导致强制关闭错误.帮帮我,等待回复!
我是Android和Java的新手.我使用HTML/Javascript构建了一个应用程序很好的应用程序.
我现在需要创建一个启动电子邮件客户端的活动,填写主题和正文,并且(困难的部分)添加文件附件.我无法在JavaScript中执行此操作,mailto:也不会附加该文件.
所以我需要通过Java完成这个并从JavaScript执行它.我认为这可以通过使用来完成,addJavaScriptInterface但我找不到任何详细的文档或示例.
我怎么能这样做?
以下是我在阅读文档后到目前为止所拥有的内容:
第二次更新代码:
MainActivity.java
public class MainActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setIntegerProperty( "splashscreen", R.drawable.splash );
super.loadUrl("file:///android_asset/www/index.html", 1000);
WebView mWebView;
mWebView = (WebView)findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JavaScriptInterface(), "Android");
}
}
Run Code Online (Sandbox Code Playgroud)
JavaScriptInterface.java
public class JavaScriptInterface {
public void doEmail(){
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/html");
sendIntent.putExtra(android.content.Intent.EXTRA_TEXT,"test text");
sendIntent.putExtra(Intent.EXTRA_SUBJECT,"test subject");
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://test co.html"));
startActivity(Intent.createChooser(sendIntent, "Send email..."));
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将使用Android.doEmail()通过JavaScript引用意图.
使用上面的代码我在Eclipse 1中遇到2个错误.方法startActivity(Intent)未定义类型--JavaScriptInterface 2. webview无法解析或不是字段 - MainActivity
我究竟做错了什么?
我开发了适用于Android的PhoneGap应用程序.该应用程序由webapp(HTML/jQuery)和由webapp启动的后台服务(Java代码)组成.
这个webapp写入window.localStorage之类的
<script>
window.localStorage.setItem("name","MyName");
</script>
Run Code Online (Sandbox Code Playgroud)
是否可以从我的Java代码中读取localStorage中的此名称?
这与我之前的问题" 如何在每次安装时在我的Android模拟器上清除应用程序的localStorage"有关?".
它还建立在' 如何清除Android应用缓存?'和' 如何以编程方式清除应用程序数据?".
上述问题均未提供适用于Android PhoneGap/Cordova应用程序的直接答案.本博客文章由伊戈尔Hrupin涵盖在上下文的情况下原生 Android应用程序,所以这个问题扩展了覆盖科尔多瓦.
我会自己发一个答案,但我是一个完整的Java菜鸟,所以请编辑改进.
var camera = {
settings : {
quality : 50,
targetWidth : 1024,
targetHeight : 1024,
correctOrientation : true
}
};
var error = function(message) {
alert("Error happened while trying to get a picture", message);
};
document.addEventListener("deviceready", function() {
camera.toFile = function() {
this.settings.destinationType = navigator.camera.DestinationType.FILE_URI;
return this;
},
camera.toBase64 = function() {
this.settings.destinationType = navigator.camera.DestinationType.DATA_URL;
return this;
},
camera.fromCamera = function() {
this.settings.sourceType = navigator.camera.PictureSourceType.CAMERA;
return this;
};
camera.fromLibrary = function() {
this.settings.sourceType = navigator.camera.PictureSourceType.PHOTOLIBRARY;
return this;
};
camera.fromPhotoAlbum …Run Code Online (Sandbox Code Playgroud) 我有和应用程序构建PhoneGap,我正在尝试与Javascript本机代码进行通信.
在我的DroidGap扩展课程中:
@Override
public void onCreate(Bundle savedInstanceState) {
Logger.log("oncreate");
super.onCreate(savedInstanceState);
super.init();
super.appView.getSettings().setJavaScriptEnabled(true);
super.appView.getSettings().setSupportZoom(true);
super.appView.getSettings().setBuiltInZoomControls(true);
super.appView.getSettings().setDisplayZoomControls(false);
jsinterface = new CommunicationInterface(this, appView);
super.appView.addJavascriptInterface(jsinterface, "communicationinterface");
}
Run Code Online (Sandbox Code Playgroud)
javascript接口:
public class CommunicationInterface {
private WebView mAppView;
private DroidGap mGap;
public CommunicationInterface(DroidGap gap, WebView view) {
mAppView = view;
mGap = gap;
}
public String getTestString() {
return "teststring";
}
public void parse(Object o) {
Logger.log(o);
}
}
Run Code Online (Sandbox Code Playgroud)
在Javacript位于外部文件(I创建,其具有在此行的HTML文件header:<script type="text/javascript" src="scripts.js"></script>)
Scripts.js:
function …Run Code Online (Sandbox Code Playgroud)