Поиск текущего местоположения в Android

1

Я пытаюсь найти текущее местоположение, и это мой код.

 LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);        
        Location location =new Location(mlocManager.GPS_PROVIDER);      

 System.out.println("***longitude **"+location.getLongitude());
        System.out.println("***latitude **"+location.getLatitude());

но когда я запускаю приложение, он всегда отображает 0.0, может ли кто-нибудь увидеть проблему?

  • 0
    попробуйте использовать NETWORK_PROVIDER, если вы проверяете его в помещении.
  • 0
    нет я не получаю никакой ошибки
Показать ещё 2 комментария
Теги:
google-maps

5 ответов

1
Лучший ответ
Location location =new Location(mlocManager.GPS_PROVIDER); 

после написания этого утверждения, если вы наложите курсор на местоположение. Вы узнаете, как это сделать.

Согласно Google Doc

выше Создает новое местоположение. По умолчанию время, широта, долгота и numSatellites равны 0; hasAltitude, hasSpeed и hasBearing - false; и дополнительной информации нет.

Вам нужно запустить requestLocationUpdate чтобы получить Lat & lon (если есть).

Также, поскольку вы используете этот пример в эмуляторе. Вам нужно будет эмулировать отправку Lat & Lon вручную.

Изображение 174551

  • 0
    да ты прав это работа ..
  • 0
    Это мило!! Ура !!
1

Местоположение приобретается асинхронно. Вам необходимо зарегистрировать LocationListener с помощью вашего LocationManager, чья onLocationChanged(Location l) будет вызываться всякий раз, когда доступна новая информация о местоположении.

  • 0
    да, это одно из решений, но этот метод не работает для эмулятора, потому что эмулятор не может изменить местоположение, так что их любой другой вариант для меня ...
  • 0
    Вы должны использовать макеты мест. См. Developer.android.com/guide/topics/location/…
0

Я думаю, что вы хотели сделать это

Location location = mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

Но учтите, что это будет работать, только если ваш GPS уже захватил предыдущее место. Поэтому на эмуляторе вам нужно будет отправить местоположение до того, как эта строка будет вызвана, а на реальном устройстве gps нужно будет активировать перед линией и получить местоположение.

0

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

Также Menifest использование: разрешение в файле Menifest. FINE_LOCATION

  • 0
    Нет, я попробую это в эмуляторе ..
0

Попробуй это...

package com.ShowLocationActivity;
 import java.util.List;
 import java.util.Locale;
 import android.app.Activity;
 import android.content.Context;
 import android.location.Address;
 import android.location.Criteria;
 import android.location.Geocoder;
 import android.location.Location;
 import android.location.LocationListener;
 import android.location.LocationManager;
 import android.os.Bundle;
 import android.widget.TextView;
 import android.widget.Toast;


  public class ShowLocationActivity extends Activity implements LocationListener{
private TextView latituteField;
private TextView longitudeField;
private TextView placeName;
private LocationManager locationManager;
private String provider;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    latituteField = (TextView) findViewById(R.id.TextView02);
    longitudeField = (TextView) findViewById(R.id.TextView04);
    placeName=(TextView) findViewById(R.id.TextView06); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    if (location != null) {
    //  Toast.makeText(this, String.valueOf("Provider " + provider + " has been selected."), 600).show();
        latituteField.setText(String.valueOf(location.getLatitude()));
        longitudeField.setText(String.valueOf(location.getLongitude()));
    } else {
        latituteField.setText("Provider not available");
        longitudeField.setText("Provider not available");
    }

    try {
        Geocoder geo = new Geocoder(this.getApplicationContext(), Locale.getDefault());
        List<Address> addresses = geo.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
        if (addresses.isEmpty()) {
            placeName.setText("Waiting for Location");
        }
        else {
            if (addresses.size() > 0) {
                placeName.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() +", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName());
            }
        }
    }
    catch(Exception e){
        Toast.makeText(this, "No Location Name Found", 600).show();
    }
}

@Override
protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(provider, 400, 1, this);
}
@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    latituteField.setText(String.valueOf(location.getLatitude()));
    longitudeField.setText(String.valueOf(location.getLongitude()));

    try {
        Geocoder geo = new Geocoder(this.getApplicationContext(), Locale.getDefault());
        List<Address> addresses = geo.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
        if (addresses.isEmpty()) {
            placeName.setText("Waiting for Location");
        }
        else {
            if (addresses.size() > 0) {
                placeName.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() +", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName());
            }
        }
    }
    catch(Exception e){
        Toast.makeText(this, "No Location Name Found", 600).show();
    }
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Disabled provider " + provider,Toast.LENGTH_SHORT).show();
}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Enabled new provider " + provider,Toast.LENGTH_SHORT).show();
}

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

}

}

Вот Xml файл

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

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="40dip"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="5dip"
        android:text="Latitude: "
        android:textSize="20dip" >
    </TextView>

    <TextView
        android:id="@+id/TextView02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="unknown"
        android:textSize="20dip" >
    </TextView>
</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/TextView03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="5dip"
        android:text="Longitute: "
        android:textSize="20dip" >
    </TextView>

    <TextView
        android:id="@+id/TextView04"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="unknown"
        android:textSize="20dip" >
    </TextView>
</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/TextView05"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="5dip"
        android:text="Place Name "
        android:textSize="20dip" >
    </TextView>

    <TextView
        android:id="@+id/TextView06"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="unknown"
        android:textSize="20dip" >
    </TextView>
</LinearLayout>

Вот файл манифеста

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.ShowLocationActivity"
  android:versionCode="1"
  android:versionName="1.0">
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> 
   <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".ShowLocationActivity"
              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>

Работает для меня.. попробуйте это, он будет работать для u 2.... :)

  • 0
    Но, насколько мне известно, Criteria несколько раз возвращает нулевое значение ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню