2013-04-01 4 views
0

Я думаю, что я сделал все с помощью API Карт Google версии 2, но позиция не отображается, и камера не меняет свое положение.Не удается найти местоположение пользователя:

Карта загружается нормально, но остается только в 0,0 месте и она никогда не перемещается.

В устройстве я вижу сигнал GPS только для поиска положения, и я уже тестировал его снаружи.

Вот мой код: MainActivity.java:

public class MainActivity extends FragmentActivity implements LocationSource,LocationListener, OnMapClickListener, OnMyLocationChangeListener 
    { 

     final int RQS_GooglePlayServices = 1; 
     private GoogleMap myMap; 
     private LocationManager lm; 
     public Location myLocation; 
     public TipoBusca busca; 
     private enum TipoBusca {BUSCA_PARADA, BUSCA_LOCALIZACAO_INICIAL, BUSCA_LOCALIZACAO, BUSCA_ENDERECO, BUSCA_DRAG}; 
     public String tipoRequest; 
     private Criteria myCriteria; 
     public TextView textView; 
     public OnMyLocationChangeListener locationListener; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
        //Define textView wich will receive test messages 
       textView = (TextView) findViewById(R.id.textView1); 

       // 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 
        { 
           //Defining fragment for map 
          FragmentManager myFragmentManager = getSupportFragmentManager(); 
        SupportMapFragment mySupportMapFragment = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map); 
        myMap = mySupportMapFragment.getMap(); 
        myMap.setMyLocationEnabled(true); 
        myMap.setIndoorEnabled(true); 
        myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
        myMap.setLocationSource(this); 
        //myMap.setOnMyLocationChangeListener(this); 
        myMap.setOnMyLocationChangeListener((OnMyLocationChangeListener) locationListener); 

        myCriteria = new Criteria(); 
        myCriteria.setAccuracy(Criteria.ACCURACY_FINE); 

        lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);    
        //lm.requestLocationUpdates(0, 50.0f, myCriteria, this, null); 
        lm.requestLocationUpdates(250, 1, myCriteria, this, null); 

        textView.setText("Localizando usuário..."); 
        myLocation = myMap.getMyLocation(); 
         } 
      } 

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

} 

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

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void activate(OnLocationChangedListener listener) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void deactivate() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onMapClick(LatLng point) { 
    // TODO Auto-generated method stub 
    myMap.animateCamera(CameraUpdateFactory.newLatLng(point)); 
} 

@Override 
public void onMyLocationChange(Location location) { 
    // TODO Auto-generated method stub 
    Log.i("onMyLocationChanged", "my location changed"); 
    LatLng latlng= new LatLng(location.getLatitude(), location.getLongitude()); 
    myMap.moveCamera(CameraUpdateFactory.newLatLng(latlng)); 
    myMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 
    textView.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude()); 
} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 
    Log.i("onLocationChanged", "location changed"); 
} 
} 

Manifest:

 <?xml version="1.0" encoding="utf-8"?> 
     <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="myPackage" 
android:versionCode="1" 
android:versionName="1.0" > 
      <!-- Setting Permissions --> 
      <permission 
    android:name="myPackage.permission.MAPS_RECEIVE" android:protectionLevel="signature"></permission> 
      <uses-permission android:name="myPackage.permission.MAPS_RECEIVE"/> 
      <!-- Setting versions requirements --> 
      <uses-sdk 
        android:minSdkVersion="8" 
        android:targetSdkVersion="17" /> 

      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
      <uses-permission android:name="android.permission.INTERNET"/> 
      <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
      <!-- External storage for caching. --> 
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
      <!-- My Location --> 
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
      <!-- Maps API needs OpenGL ES 2.0. --> 
      <uses-feature 
         android:glEsVersion="0x00020000" 
         android:required="true"/> 

      <!-- setting icon for application --> 
      <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar" > 

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

       <activity android:name="myPackage.MainActivity" > 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 

         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
       </activity> 
      </application> 

     </manifest> 

ответ

0

Если то, что вы пытаетесь сделать, чтобы иметь камеру автоматически обновляют, когда пользователь (My Расположение точка) изменит местоположение, то вы только необходимо следующее:

  1. реализовать OnMyLocationChangeListener
  2. myMap.setMyLocationEnabled(true) (включить мое-расположение слой, который имеет встроенный провайдера местоположения)
  3. myMap.setOnMyLocationChangeListener(this) (зарегистрироваться для получения обновлений, когда Мое местоположение точка изменяет местоположение)
  4. в методе обратного вызова onMyLocationChange(Location location) обновления камеры соответственно.

У вас уже есть код для всего этого, но я вижу, что вы прокомментировали строку на шаге 3, и это, вероятно, причина, по которой вы не видите обновление камеры.

Вам не нужно реализовать LocationSource и LocationListener (поскольку слой моей-локация имеет свой собственный поставщик местоположения), и вам нужно OnMapClickListener только если вы хотите, чтобы ответить пользователь, нажав на точку на карте.

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