相关疑难解决方法(0)

Android 4.2.1,WebView和javascript界面​​中断

我有一个添加了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对象,但它只是没有请求的方法(握手),怎么会这样呢?

任何帮助将不胜感激,因为这在过去的两周左右让我疯狂(这是一个我一直回去的错误,然后放弃等等).谢谢.

javascript android webview

34
推荐指数
1
解决办法
3万
查看次数

移动网络:如何获得物理像素大小?

我正在使用jQuery Mobile和PhoneGap创建一个Web应用程序.有一个图表,如果用户使用大屏幕,我想在此图表上显示更多点,因为点是可点击的,并且不应该太近(物理上).

例如:如果有人有iPhone,我想在折线图上显示N个点.如果他有一台iPad,我想显示2xN分(因为iPad的屏幕体积更大),但如果他有一些像iPhone一样体积小的新手机,但屏幕上有很多像素(如iPad),我想要显示N个点,因为这些点在物理上很小(并且更靠近在一起).

那么有没有办法获得这些数据?另一种方法是确定设备是否为平板电脑.

mobile jquery-mobile cordova

12
推荐指数
2
解决办法
2万
查看次数

使用Phonegap暂停Android应用

有没有办法以编程方式暂停Phonegap中的Android应用程序?我想模仿按下HOME按钮时发生的行为.我已经不得不使用这个来覆盖后退按钮处理程序,而在大多数情况下我希望它执行我的操作,当在特定状态下用户希望应用程序最小化时,我想复制此行为.

请记住,在Android上,这与关闭应用程序不同.这很容易做到,device.exitApp();但我希望它能记住它的状态并继续在后台运行.特别是如果仍然在后台完成异步作业.

Phonegap中是否有一项功能可以实现这一目标?

可能重复在Android Phonegap手动暂停应用程序,但是我找不到OP提到的那些工具navigator,所以我很清楚完全编辑和重写他们的帖子

android sleep cordova

11
推荐指数
1
解决办法
6140
查看次数

如何从PhoneGap调用Android活动

我是PhoneGap的新手,我可以用PhoneGap实现基本应用程序,现在进一步增强它,我想将PhoneGap与Android活动连接,基本上我打算使用javascript函数调用startActivity()方法.

我尝试过Android Java和Phonegap Javascript之间的通信?

但是我没有召唤一个活动,导致强制关闭错误.帮帮我,等待回复!

javascript android android-activity cordova

8
推荐指数
1
解决办法
2万
查看次数

Android - 如何从JavaScript运行intent

我是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

我究竟做错了什么?

javascript java email android webview

6
推荐指数
2
解决办法
1万
查看次数

Android服务读取localStorage?

我开发了适用于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中的此名称

java android local-storage cordova

6
推荐指数
1
解决办法
3817
查看次数

以编程方式清除Android上的PhoneGap/Cordova应用程序缓存以模拟全新安装?

这与我之前的问题" 如何在每次安装时在我的Android模拟器上清除应用程序的localStorage"有关?".

它还建立在' 如何清除Android应用缓存?'和' 如何以编程方式清除应用程序数据?".

上述问题均未提供适用于Android PhoneGap/Cordova应用程序的直接答案.本博客文章伊戈尔Hrupin涵盖在上下文的情况下原生 Android应用程序,所以这个问题扩展了覆盖科尔多瓦.

我会自己发一个答案,但我是一个完整的Java菜鸟,所以请编辑改进.

java jquery android cordova

4
推荐指数
2
解决办法
2万
查看次数

从相机拍摄照片会在20%的时间内失败

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)

camera android cyanogenmod cordova

4
推荐指数
1
解决办法
2499
查看次数

使用PhoneGap从Android调用Javascript

我有和应用程序构建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)

javascript android cordova

3
推荐指数
1
解决办法
2万
查看次数