GVKun编程网logo

捏缩放Google Maps API v3 Android Webkit

2

在这篇文章中,我们将为您详细介绍捏缩放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

捏缩放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和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解析

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中心标记

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的内存泄漏

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的内存泄漏的相关信息,可以在本站进行搜索。

本文标签: