2013-05-02 4 views
1

Я разрабатываю приложение с Android и Google Maps V2, я пробовал много учебников, и приложение работает нормально, без ошибок, и оно обнаружило мое местоположение, но когда я попытался откройте приложение в другом месте, приложение не обновило местоположение вообще, мне нужно знать, как обновить местоположение, я тестирую на Samsung Galaxy S Duos GT-S7562 с программным обеспечением ICSAndroid Google Maps V2 не обновил местоположение

Итак, мои вопросы по: Как обновить текущее местоположение ?. Есть кнопка в верхнем правом углу с картой, как я могу поместить в нее событие, чтобы я мог получить свое текущее местоположение ?.

Вот код, который я использую.

ShowMap.java:

package com.maps00; 

public class ShowMap extends Activity implements LocationListener{ 

    GoogleMap googleMap; 
    LatLng myposition; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.show_map); 
     MapFragment fm=(MapFragment) getFragmentManager().findFragmentById(R.id.map); 
    googleMap=fm.getMap(); 
    googleMap.setMyLocationEnabled(true); 
    LocationManager locationManager=(LocationManager) getSystemService(LOCATION_SERVICE); 
    Criteria criteria=new Criteria(); // object to retrieve provider 
    String provider = locationManager.getBestProvider(criteria, true); 
    Location location=locationManager.getLastKnownLocation(provider); 
    if(location!=null){ 
     onLocationChanged(location); 
    } 
    locationManager.requestLocationUpdates(provider, 20000, 0, this); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
       double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     LatLng latLng = new LatLng(latitude, longitude); 
     myposition = new LatLng(latitude, longitude); 
     googleMap.addMarker(new MarkerOptions().position(myposition).title("Start")); 
     googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
     googleMap.animateCamera(CameraUpdateFactory.zoomTo(17)); 
     TextView t=(TextView) findViewById(R.id.tv_location); 
     t.setText("Latitude:" + latitude + ", Longitude:"+ longitude); 
    } 
} 

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.maps00" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

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

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" /> 
    <uses-permission android:name="com.maps00.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <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.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:name="android.hardware.location" 
     android:required="false" /> 
    <uses-feature 
     android:name="android.hardware.location.network" 
     android:required="false" /> 
    <uses-feature android:name="android.hardware.location.gps" /> 
    <uses-feature 
     android:name="android.hardware.wifi" 
     android:required="false" /> 

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


    </application> 
</manifest> 

layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".ShowMap" > 
<fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.MapFragment" /> 
    <TextView 
     android:id="@+id/tv_location" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/map" 
     android:layout_alignTop="@+id/map" 
     android:layout_marginLeft="83dp" 
     android:text="TextView" /> 
</RelativeLayout> 
+0

Я бы рекомендовал использовать FusedLocationApi для получения обновлений местоположения. Вы можете найти пример здесь https://stackoverflow.com/a/44908276/1808829 –

ответ

3

Edit:

GoogleMap.setOnMyLocationChangeListener считается устаревшим с версии библиотеки 3.1.36.

Оригинал:

Использование GoogleMap.setOnMyLocationChangeListener вместо взаимодействия с LocationManager непосредственно.

Предупреждение об утечке и утечке памяти: При использовании requestLocationUpdates вы должны быть незарегистрированы. Вашим пользователям не понравится ваше приложение, если оно запросит обновление даже после закрытия Activity.

+0

Спасибо, что это работает сейчас, я также обнаружил, что иногда мне нужно перезагрузить свое устройство, чтобы я мог видеть эффект моего нового кода. –

+0

Вы также обнаружили, что 'onProviderDisabled' и' onProviderEnabled' и 'onStatusChanged', а импорт и комментарии необязательно были частью вашего вопроса? Вы никогда не подтвердили ответ (хотя вы его приняли). Вы никогда не добавляли маленький код, который вы поставили ВСЕ свой код во ВСЕХ ваших вопросах. Снова прочитайте FAQ. Из ваших значков видно, что вы никогда не читали FAQ. @MaciejGorski для вас. – Siddharth

+0

@Siddharth Спасибо, что дал мне возможность обновить ответ. –

Смежные вопросы