我一直在使用PhoneGap并且它很棒,但是我遇到了在Verizon Droid w/2.0.1上获得位置的问题(在G1 w/1.6上按预期工作).
GeoLocation API支持已添加到Android 2.0(Eclair)中,它可以在Verizon Droid的默认浏览器中使用(在2.0.1上).也就是说,如果我访问一个网站,呼吁navigator.geolocation.getCurrentPosition(success_callback,error_callback),设备将提示当前域"想知道你的位置"的选项中一个对话框,以"共享位置"或"下降".如果我选择"共享位置",则最终会使用位置数据调用success_callback.
如果我在WebView中访问同一个网站,则对navigator.geolocation.getCurrentPosition的调用不会生成javascript错误,但不会显示"共享您的位置"对话框,也不会调用任何回调.在logcat中,我看到了什么似乎是一个相关的错误:"10月2日至15日:37:00.413:ERROR/geolocationService(16871):抓安全例外登记从系统这应该只在DumpRenderTree发生位置更新"
在我看来,WebView无法注册位置更新,因为它没有所需的权限,而这又是不提示用户获得权限的结果.尽管在Android 2.0中与GeoPermissions相关的Webkit包中添加了几个方法和对象,但我无法使用它们中的任何一个来使WebView显示GeoPermission对话框.
以下内容基于Android Developer's Guide中的Hello,WebView示例,但它添加了2.0中与GeoPermissions相关的一些调用和对象.*使用适当的网址更新(获得作者许可- 感谢Oliver!).
有没有人能够使这个工作?任何反馈都会很棒,谢谢!
package com.example.android.helloactivity;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.GeolocationPermissions;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.GeolocationPermissions.Callback;
public class HelloActivity extends Activity implements GeolocationPermissions.Callback{
WebView webview;
String geoWebsiteURL = "http://maxheapsize.com/static/html5geolocationdemo.html";
public HelloActivity() {
}
/**
* Called with the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_activity);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setGeolocationEnabled(true); //seems like if i …Run Code Online (Sandbox Code Playgroud) 我正在使用Eclipse Indigo和Android/NDK混合项目.我添加了C++性质,几乎所有东西都在工作.自动构建工作; 也就是说,当我编辑文件时,调用ndk-build并成功完成 - 没有构建错误.鼠标悬停代码辅助工作(小窗口弹出有关该功能的信息).如果我将光标放在包含行并按F3,相关的头文件打开(根据我的配置而不是我期望的那个,但是相关的一个 - 可能是一个线索?).
如果我在.cpp文件中选择以下行,则会打开$ NDKROOT/platform/android-3/arch-arm/usr/include/ctype.h:
#include <ctype.h>
Run Code Online (Sandbox Code Playgroud)
(isdigit在此文件中定义)
但是,Eclipse坚持认为isdigit没有定义.我已经阅读了许多帖子,建议静态分析器或索引器都应该受到指责,但我已经尝试了许多建议的解决方案无济于事.
如果我添加如下所示的行,则错误消失,鼠标悬停代码帮助该功能工作:
extern int isdigit(int);
Run Code Online (Sandbox Code Playgroud)
同样,这不是链接器错误或编译器错误 - ndk-build完成且没有错误.这是日食里面的东西.谢谢参观!
编辑:我现在认为这是一个代码分析问题.更好的解决方案是编辑代码分析选项以使"无法解析功能"成为警告而不是错误.这样您可以在"问题"视图中看到警告,但继续工作.如果函数真的丢失了,编译器会告诉你!我还有一个新理论,问题在于符号链接后的代码分析器,因为所有"缺失"函数都在符号链接的包含文件中.会喜欢这个理论的任何意见.
eclipse java-native-interface android eclipse-cdt android-ndk
我正在开发一套Cordova插件.最初的实现只是Android,所以现在我有兴趣在Eclipse中使用ADT进行插件开发.我已经阅读了文档,并且已经能够完成第一个插件,但工作流程有点痛苦.我在Cordova中找不到专门支持插件开发工作流程的任何文档或工具.我想知道我是否让它变得比它需要的更难?这就是我在做的事情.
该插件是根据cordova插件规范设置的.我开始设置目录结构并在Sublime中编辑文件,所以我有类似的东西:
我用样板和初始实现设置了所有这些.然后开始测试,我创建了一个cordova项目,添加了android平台,添加了我的插件并构建:
cordova create testProject
cd testProject
cordova platform add android
cordova plugin add $PLUGIN_ROOT
cordova build
cordova run
Run Code Online (Sandbox Code Playgroud)
完成所有这些后,我将testProject/platforms/android导入ADT并开始编辑Plugin.java和plugin.js,以及assets/www以添加测试工具.
现在,在按照我想要的方式处理所有内容之后,我必须手动将所有已更改的文件(以及我添加的任何文件)复制回$ PLUGIN_ROOT下的相应位置.我也想保留我的测试工具,可能在$ PLUGIN_ROOT/test中.这是第一次不是太糟糕,但经过几次迭代后,它变得有点笨拙.手动执行它似乎也很容易出错,但我不能真正使用合并工具为我做这件事,因为目录结构不同.我可以写一个脚本,但后来我会增加更多的维护开销.话虽这么说,我目前正在计划编写脚本来为我要编写的每个插件执行此操作.
有没有更好的办法?我真的很想听听cordova插件开发人员如何管理它.谢谢.
我正在开发一个自定义 Android Web 浏览器,并且需要解决 XHR 中的错误。我想使用 javascript XHR 包装器来修复该错误(我已经修复了)。
在加载其他任何内容(包括头部的脚本)之前,如何强制在每个页面加载时加载此内容?
请注意,我无法控制的任意网页内容将被加载到我的网页视图中,因此我无法执行从 html 页面加载脚本之类的操作。我需要做一些事情,比如拦截 head 中的第一个脚本请求并同步注入我的脚本。我不确定这种确切的方法是否可行 - 只是试图提供一个可以满足我的要求的方法的示例。
我愿意采用完全不同的方法 - 我只知道如何通过 javascript 包装器来修复它。
我需要修复的错误的详细信息并不重要,但以防万一有人好奇,非 android_asset 文件 url 的成功 XMLHttpRequest 会将状态设置为 0,并将 statusText 设置为“”。由于某些使用 XHR 的框架将 status!=200 和/或 statusText!="OK" 视为错误,因此我需要覆盖默认行为并返回 status=200 和 statusText="OK" 以获得非 android_asset 文件的成功 XMLHttpRequests网址。
android ×4
cordova ×2
webview ×2
android-ndk ×1
cordova-3 ×1
eclipse ×1
eclipse-cdt ×1
geolocation ×1