在这篇文章中,我们将为您详细介绍捏缩放GoogleMapsAPIv3AndroidWebkit的内容。此外,我们还会涉及一些关于Android2.3和GoogleMapsAPIv2、AndroidAp
在这篇文章中,我们将为您详细介绍捏缩放Google Maps API v3 Android Webkit的内容。此外,我们还会涉及一些关于Android 2.3和Google Maps API v2、Android App中Google Maps API的JSON解析、Android Google Maps API V2中心标记、Android Google Maps API v2的内存泄漏的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 捏缩放Google Maps API v3 Android Webkit
- Android 2.3和Google Maps API v2
- Android App中Google Maps API的JSON解析
- Android Google Maps API V2中心标记
- Android Google Maps API v2的内存泄漏
捏缩放Google Maps API v3 Android Webkit
我正在写一个webkit应用程序,我正在使用谷歌地图api v3.我在Android手机(HTC Desire)上试过它,但它不会捏缩放.请注意,我不想捏合和缩放我想要在网页视图中缩放谷歌地图v3地图的网页.有没有人有这个Android的工作?
解决方法:
看来,目前您不能依赖于能够在Android浏览器上接收捏合缩放事件.这是Android问题跟踪器:http://code.google.com/p/android/issues/detail?id=11909
Android 2.3和Google Maps API v2
今天,我尝试使用适用于Android 2.3.3的Google Maps api v2我的步骤:
- 从debug.keystore获得SHA1代码
- 在Google API控制台中创建一个新项目
- 注册一个新的ID
- 启用了Google Maps android api v2
- 使用输入SHA1创建一个Android密钥; it.mappe(it.mappe是我的包)
- 获取API密钥
- 更新AndroidManifest文件:
<permission android:name="it.mappe.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="it.mappe.permission.MAPS_RECEIVE" /> <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-feature android:glEsVersion="0x00020000" android:required="true"` /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="MY_KEY" /> <activity android:name="it.mappe.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
- 我的主要活动
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
我的activity_main:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"/>
将目录复制
ANDROID_SDK_DIR/extras/google/google_play_services/libproject/google-play-services_lib
到项目的根目录添加
/extras/android/compatibility/v4/android-support-v4.jar
为外部罐将下一行添加到
YOUR_PROJECT/project.properties
android.library.reference.1=google-play-services_lib
当我在三星银河S上运行它(使用Google Play服务apk)时,它崩溃并且logcat显示此错误
E/AndroidRuntime(6435): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{it.mappe/it.mappe.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581) at android.view.LayoutInflater.inflate(LayoutInflater.java:386) at android.view.LayoutInflater.inflate(LayoutInflater.java:320) at android.view.LayoutInflater.inflate(LayoutInflater.java:276) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:209) at android.app.Activity.setContentView(Activity.java:1657) at it.mappe.MainActivity.onCreate(MainActivity.java:12) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) ... 11 more Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/it.mappe-2.apk] at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) at java.lang.ClassLoader.loadClass(ClassLoader.java:551) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at android.view.LayoutInflater.createView(LayoutInflater.java:471) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549) at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) ... 19 more
一些建议?
编辑
这是我的main.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>
答案1
小编典典<fragment>
应该全部小写。
另外,您正在使用Activity
(不是FragmentActivity
)与SupportMapFragment
,并且我怀疑该组合是否有效。
Android App中Google Maps API的JSON解析
我正在尝试使用Google Maps
API来获取路线时间。我希望创建一个URL,获取JSON响应,然后检查该响应的旅行持续时间。创建JSON对象后,我在导航时会遇到麻烦。对我来说,这表明我要么弄乱了获取响应,要么浏览JSON对象。如果您能窥见我从网络教程中拼凑而成的零碎代码,我将不胜感激。
此代码旨在获取响应。它被try / catch包围,并且没有触发任何错误。
String stringUrl = <URL GOES HERE>;
URL url = new URL(stringUrl);
HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK)
{
BufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192);
String strLine = null;
while ((strLine = input.readLine()) != null)
{
response.append(strLine);
}
input.close();
}
String jsonOutput = response.toString();
这段代码的目的是获取该输出并将其解析为最终的字符串,即持续时间,这是由该stackoverflow答案针对类似问题得出的。
JSONObject jsonObject = new JSONObject(jsonOutput);
JSONObject routeObject = jsonObject.getJSONObject("routes");
JSONObject legsObject = routeObject.getJSONObject("legs");
JSONObject durationObject = legsObject.getJSONObject("duration");
String duration = durationObject.getString("text");
我在第二个块的第二行捕获了一个JSON异常。谁能帮助解决此问题?还是建议一种更简单的方法来获取相同的数据?
编辑:由于这里第一个有用的答案(从aromero),后半部分现在看起来像:
JSONObject jsonObject = new JSONObject(responseText);
JSONArray routeObject = jsonObject.getJSONArray("routes");
JSONArray legsObject = routeObject.getJSONArray(2); ***error***
JSONObject durationObject = legsObject.getJSONObject(1);
String duration = durationObject.getString("text");
但是它仍然抛出JSON异常,只是现在它在第三行之后。我敢肯定,这很容易解决,但我真的很感谢您的帮助。
JSON文件示例的相关部分如下所示:
{
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 34.092810,"lng" : -118.328860
},"southwest" : {
"lat" : 33.995590,"lng" : -118.446040
}
},"copyrights" : "Map data ©2011 Google","legs" : [
{
"distance" : {
"text" : "12.9 mi","value" : 20807
},"duration" : {
"text" : "27 mins","value" : 1619
},
Android Google Maps API V2中心标记
有没有一种方法可以使地图尽可能放大,但同时将所有标记保留在屏幕上。我有六个标记形状不一致的标记。我当时只是想把他们的中心放在地图上,但是我仍然不知道我可以通过编程方式放大地图多远。
每次创建地图时,这些标记都会更改位置。理想情况下,我将使用一个脚本来放大地图,以便将所有视图都包含在视图中。
这样你就明白了。我一次从json创建一个标记,并在循环中添加以下行。
mMap.addMarker(new MarkerOptions().position(new LatLng(lat,lng)).title(c.getString("title")));
答案1
小编典典您应该使用CameraUpdate类来(可能)进行所有程序化地图移动。
为此,首先像这样计算所有标记的边界:
LatLngBounds.Builder builder = new LatLngBounds.Builder();for each (Marker m : markers) { builder.include(m.getPosition());}LatLngBounds bounds = builder.build();
然后通过使用工厂获取运动描述对象:CameraUpdateFactory:
int padding = 0; // offset from edges of the map in pixelsCameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
最后移动地图:
googleMap.moveCamera(cu);
或者,如果您想要动画:
googleMap.animateCamera(cu);
Android Google Maps API v2的内存泄漏
我在Google Maps Android API v2上遇到内存泄漏问题.在以下情况下,每当我的视图再次变为可见时,堆使用量将增加约85KB:
>手机屏幕关闭(例如,按电源按钮后).
>用户按“主页”按钮退出应用程序.
该应用最终因OutOfMemory异常而崩溃.屏幕旋转或通过“返回”按钮退出时不会发生泄漏.关于变通办法或此问题背后的原因有任何想法吗?
我的代码:
public class LeakActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leak);
}
}
和XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/map_1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
解决方法:
这可能与Maps API中的未解决问题有关:
Issue 4766 – Bug: Android Maps API v2 leaks huge amounts of memory
使用DDMS的“转储HPROF”工具转储hprof文件,使用hprof-conv对其进行转换,然后使用MAT检查泄漏.如果它在Google Maps API中,请在未解决的问题上发布apk(或更简单的测试代码)并包含hprof文件.
如果与我遇到的错误相同,则可能仅在Android 2.x上发生,请也进行检查.
我们今天的关于捏缩放Google Maps API v3 Android Webkit的分享就到这里,谢谢您的阅读,如果想了解更多关于Android 2.3和Google Maps API v2、Android App中Google Maps API的JSON解析、Android Google Maps API V2中心标记、Android Google Maps API v2的内存泄漏的相关信息,可以在本站进行搜索。
本文标签: