0

我通过参考以下链接为android地图视图(api v2)制作了一个非常简单的演示程序,但是我的程序没有显示地图。它没有运行。请帮助我,我的代码如下:

主要的.xml

<?xml version="1.0" encoding="utf-8"?>
<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:name="com.google.android.gms.maps.MapFragment"/>

main.java

    package com.example.mymap;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.support.v4.app.FragmentActivity; 

public class MainActivity extends FragmentActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }



}

清单.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mymap"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <permission
        android:name="com.example.mymap.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="com.example.mymap.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.mymap.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>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyCuS-daQYgOZsmbIBYUTCl0P5tV0GTnjrI" />
    </application>

</manifest>
4

6 回答 6

4

请尝试使用我的运行代码。

首先导入谷歌播放服务库项目,/Android/android-sdk-linux/extras/google/google_play_services然后创建新项目并编写此代码。

//Main Activity
package in.wptrafficanalyzer.multipleproximitymapv2;

import android.app.Dialog;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends FragmentActivity {

GoogleMap googleMap;
LocationManager locationManager;
PendingIntent pendingIntent;
SharedPreferences sharedPreferences;
int locationCount = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Getting Google Play availability status
    int status = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(getBaseContext());

    // Showing status
    if (status != ConnectionResult.SUCCESS) { // Google Play Services are
                                                // not available

        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this,
                requestCode);
        dialog.show();

    } else { // Google Play Services are available

        // Getting reference to the SupportMapFragment of activity_main.xml
        SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);

        // Getting GoogleMap object from the fragment
        googleMap = fm.getMap();

        // Enabling MyLocation Layer of Google Map
        googleMap.setMyLocationEnabled(true);

        // Getting LocationManager object from System Service
        // LOCATION_SERVICE
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // Opening the sharedPreferences object
        sharedPreferences = getSharedPreferences("location", 0);

        // Getting number of locations already stored
        locationCount = sharedPreferences.getInt("locationCount", 0);

        // Getting stored zoom level if exists else return 0
        String zoom = sharedPreferences.getString("zoom", "0");

        // If locations are already saved
        if (locationCount != 0) {

            String lat = "";
            String lng = "";

            // Iterating through all the locations stored
            for (int i = 0; i < locationCount; i++) {

                // Getting the latitude of the i-th location
                lat = sharedPreferences.getString("lat" + i, "0");

                // Getting the longitude of the i-th location
                lng = sharedPreferences.getString("lng" + i, "0");

                // Drawing marker on the map
                drawMarker(new LatLng(Double.parseDouble(lat),
                        Double.parseDouble(lng)));

                // Drawing circle on the map
                drawCircle(new LatLng(Double.parseDouble(lat),
                        Double.parseDouble(lng)));
            }

            // Moving CameraPosition to last clicked position
            googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(
                    Double.parseDouble(lat), Double.parseDouble(lng))));

            // Setting the zoom level in the map on last position is clicked
            googleMap.animateCamera(CameraUpdateFactory.zoomTo(Float
                    .parseFloat(zoom)));
        }

        googleMap.setOnMapClickListener(new OnMapClickListener() {

            public void onMapClick(LatLng point) {

                // Incrementing location count
                locationCount++;

                // Drawing marker on the map
                drawMarker(point);

                // Drawing circle on the map
                drawCircle(point);

                // This intent will call the activity ProximityActivity
                Intent proximityIntent = new Intent(
                        "in.wptrafficanalyzer.activity.proximity");

                // Passing latitude to the PendingActivity
                proximityIntent.putExtra("lat", point.latitude);

                // Passing longitude to the PendingActivity
                proximityIntent.putExtra("lng", point.longitude);

                // Creating a pending intent which will be invoked by
                // LocationManager when the specified region is
                // entered or exited
                pendingIntent = PendingIntent.getActivity(getBaseContext(),
                        0, proximityIntent, Intent.FLAG_ACTIVITY_NEW_TASK);

                // Setting proximity alert
                // The pending intent will be invoked when the device enters
                // or exits the region 20 meters
                // away from the marked point
                // The -1 indicates that, the monitor will not be expired
                locationManager.addProximityAlert(point.latitude,
                        point.longitude, 20, -1, pendingIntent);

                /**
                 * Opening the editor object to write data to
                 * sharedPreferences
                 */
                SharedPreferences.Editor editor = sharedPreferences.edit();

                // Storing the latitude for the i-th location
                editor.putString(
                        "lat" + Integer.toString((locationCount - 1)),
                        Double.toString(point.latitude));

                // Storing the longitude for the i-th location
                editor.putString(
                        "lng" + Integer.toString((locationCount - 1)),
                        Double.toString(point.longitude));

                // Storing the count of locations or marker count
                editor.putInt("locationCount", locationCount);

                /** Storing the zoom level to the shared preferences */
                editor.putString("zoom",
                        Float.toString(googleMap.getCameraPosition().zoom));

                /** Saving the values stored in the shared preferences */
                editor.commit();

                Toast.makeText(getBaseContext(),
                        "Proximity Alert is added", Toast.LENGTH_SHORT)
                        .show();

            }
        });

        googleMap.setOnMapLongClickListener(new OnMapLongClickListener() {

            public void onMapLongClick(LatLng point) {
                Intent proximityIntent = new Intent(
                        "in.wptrafficanalyzer.activity.proximity");

                pendingIntent = PendingIntent.getActivity(getBaseContext(),
                        0, proximityIntent, Intent.FLAG_ACTIVITY_NEW_TASK);

                // Removing the proximity alert
                locationManager.removeProximityAlert(pendingIntent);

                // Removing the marker and circle from the Google Map
                googleMap.clear();

                // Opening the editor object to delete data from
                // sharedPreferences
                SharedPreferences.Editor editor = sharedPreferences.edit();

                // Clearing the editor
                editor.clear();

                // Committing the changes
                editor.commit();

                Toast.makeText(getBaseContext(),
                        "Proximity Alert is removed", Toast.LENGTH_LONG)
                        .show();
            }
        });
    }
}

private void drawCircle(LatLng point) {

    // Instantiating CircleOptions to draw a circle around the marker
    CircleOptions circleOptions = new CircleOptions();

    // Specifying the center of the circle
    circleOptions.center(point);

    // Radius of the circle
    circleOptions.radius(20);

    // Border color of the circle
    circleOptions.strokeColor(Color.BLACK);

    // Fill color of the circle
    circleOptions.fillColor(0x30ff0000);

    // Border width of the circle
    circleOptions.strokeWidth(2);

    // Adding the circle to the GoogleMap
    googleMap.addCircle(circleOptions);

}

private void drawMarker(LatLng point) {
    // Creating an instance of MarkerOptions
    MarkerOptions markerOptions = new MarkerOptions();

    // Setting latitude and longitude for the marker
    markerOptions.position(point);

    // Adding InfoWindow title
    markerOptions.title("Location Coordinates");

    // Adding InfoWindow contents
    markerOptions.snippet(Double.toString(point.latitude) + ","
            + Double.toString(point.longitude));

    // Adding marker on the Google Map
    googleMap.addMarker(markerOptions);
}
}

// 活动主

<fragment
    android:id="@+id/map"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />


//清单

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<permission
    android:name="in.wptrafficanalyzer.multipleproximitymapv2.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-permission android:name="in.wptrafficanalyzer.multipleproximitymapv2.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="in.wptrafficanalyzer.multipleproximitymapv2.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>
    <activity
        android:name=".ProximityActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="in.wptrafficanalyzer.activity.proximity" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".NotificationView"
        android:label="@string/app_name" >
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyD2fSGTakDlROXxr2IJeDH6f31b7BSc0F8" />
</application>

于 2013-07-04T12:13:21.837 回答
1

只需检查一下:

package com.example.mymap;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.support.v4.app.FragmentActivity; 

public class MainActivity extends FragmentActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    FragmentManager myFM = .getSupportFragmentManager();

    SupportMapFragment myMAPF = (SupportMapFragment) myFM
            .findFragmentById(R.id.fragment1);
    MAP = myMAPF.getMap();
    MAP.setMyLocationEnabled(true);
    MAP.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    MAP.setOnMapClickListener(new OnMapClickListener() {
        @Override
        public void onMapClick(LatLng point) {
            // TODO Auto-generated method stub
            MAP.addMarker(new MarkerOptions().position(point).title(
                    point.toString()));
            Log.e("lat", "" + point);
        }
    });

}

}

您的 xml 文件将是:

              <fragment
                android:id="@+id/fragment1"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_below="@+id/fragment1"
                android:layout_centerHorizontal="true"
                class="com.google.android.gms.maps.SupportMapFragment" />    

最后在清单文件中添加 libray:

 <uses-library
    android:name="com.google.android.maps"
    android:required="true" />
于 2013-07-04T12:08:27.377 回答
1

将库添加到您的 AndroidManifest 文件中:

  <uses-library
        android:name="com.google.android.maps"
        android:required="true" />
于 2013-07-04T12:00:31.967 回答
0

您应该使用SupportFragmentYour min sdk is 8。

<fragment
class="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"  
android:layout_width="match_parent"
android:layout_height="match_parent"/>

您的活动必须延长FragmentActivity

进口

import android.support.v4.app.FragmentActivity;  
import com.google.android.gms.maps.SupportMapFragment; 

编辑:

从您的评论中您说有一个错误@

    import com.google.android.gms.maps.SupportMapFragment;

所以我猜你没有正确引用谷歌播放服务库项目。

下载 Google Play 服务。转到 Windows。转到 Android SDK 管理器。在 extras 下选择 Google play services。

将 google-play services_lib 库项目复制到您的工作区。库项目可以在以下路径下找到。

     <android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib library project .

将库项目导入到您的 Eclipse

点击 File > Import,选择 Android > Existing Android Code into Workspace,浏览工作区导入库项目。您可以检查它是否是库项目。右键单击库项目。转到属性。单击左侧面板上的 Android。您将看到 Is Library 已选中。

于 2013-07-04T11:59:32.050 回答
0

尝试这个。

在你的 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"
      class="com.google.android.gms.maps.SupportMapFragment"/>

在java文件中

public class MapExampleActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map_example);

    //setUpMap
}
于 2013-07-04T12:19:54.620 回答
0

在使用 google map API V2 时,我遇到了很多错误。您可以检查这些解决了我的问题的设置。

于 2013-07-04T12:23:35.180 回答