显示Android谷歌地图v2上的当前位置,但应用程序崩溃

时间:2014-09-29 11:25:58

标签: android google-maps currentlocation

这是我的活动代码

package com.example1.heartconnect;

import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;


public class Maps extends FragmentActivity {

GoogleMap map;

@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
    setContentView(R.layout.maps);

    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.gmap)).getMap();
    map.setMyLocationEnabled(true);
    map.setMapType(map.MAP_TYPE_NORMAL);

    Location loc = map.getMyLocation();

    double lat = loc.getLatitude();
    double lon = loc.getLongitude();
    LatLng position = new LatLng(lat, lon);

    Marker marker = map.addMarker(new MarkerOptions()
    .title("Your Location")
    .icon(BitmapDescriptorFactory
         .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
    .position(position));

    map.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 10));


}
}

这是XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

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

这是清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example1.heartconnect"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />
<permission
    android:name="com.example1.heartconnect.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.example1.heartconnect.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

<application
    android:allowBackup="true"
    android:icon="@drawable/heart_connect"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <uses-library android:name="com.google.android.maps" />
    <activity
        android:name="com.example1.heartconnect.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="MyCircle"></activity>
    <activity android:name="Validate"></activity>
    <activity android:name="DisplayContacts"></activity>
    <activity android:name="Maps"></activity>
    <receiver android:name=".SMSBroadcastReceiver">
        <intent-filter>
            <action android:name="android.provider.telephony.SMS_RECEIVED"></action>
        </intent-filter>
    </receiver>
    <meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />   
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDUFZIRGsVVpvJxHvjjoUV4G44-43JTnEw"/>  
</application>

</manifest>

当我删除这两行并提供Latittude&amp;手动经度,应用程序工作,我能够在LatLng上看到带有标记的裸谷歌地图

double lat = loc.getLatitude();
double lon = loc.getLongitude();

我也试图通过以下方式找到当前位置:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);

但是应用程序也崩溃了。 Plz任何人都可以建议我进行必要的修改,这样我就可以在地图上看到我当前的位置......提前Thnxx:)

2 个答案:

答案 0 :(得分:2)

这是在地图上获取当前位置的代码。

public class ShowMap extends FragmentActivity implements LocationListener{

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

        getMap();

  }
  public void getMap(){

      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);
        }
    }


   @Override
   public void onLocationChanged(Location location) {
   // Getting latitude of the current location
   double latitude = location.getLatitude();

   // Getting longitude of the current location
   double longitude = location.getLongitude();

   // Creating a LatLng object for the current location
   LatLng latLng = new LatLng(latitude, longitude);

   // Showing the current location in Google Map
   googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

   // Zoom in the Google Map
   googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));


   }

   @Override
   public void onProviderDisabled(String arg0) {
      // TODO Auto-generated method stub

   }

   @Override
   public void onProviderEnabled(String arg0) {
       // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
       // TODO Auto-generated method stub

  }

你需要import google play store into your project as a library。 并将支持v4添加到您的项目中 ,例如右键单击您的project -> select properties ->java build path -> select Libraries Tab -> click Add External JARs, and give path of your support v4 jar

我相信这一步会对你有帮助。

答案 1 :(得分:0)