2012-02-29 2 views
2

Что я делаю, это попытка получить базовую GPS-работу и не может решить проблему (ошибок нет). Когда я запускаю его на эмуляторе, он падает. Я использую андроид 2,2GPS не работает

package Weather.app; 


import android.app.Activity; 
import android.content.Context; 
import android.location.Location; 
import android.location.Geocoder; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 


public class WeatherAppActivity extends Activity{ 
/** Called when the activity is first created. */ 
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters 
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds 


protected LocationManager locationManager; 
protected LocationListener MyLocationListener; 
protected Button findButton; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    findButton = (Button) findViewById(R.id.findButton); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(
       locationManager.GPS_PROVIDER, 
       MINIMUM_TIME_BETWEEN_UPDATES, 
       MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
       (LocationListener) this 
      ); 



    findButton.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         showCurrentLocation(); 
        } 
    }); 
} 

    protected void showCurrentLocation() { 

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

       if (location != null) { 
        String message = String.format(
          "Current Location \n Longitude: %1$s \n Latitude: %2$s", 
          location.getLongitude(), location.getLatitude() 
        ); 
        Toast.makeText(WeatherAppActivity.this, message, 
          Toast.LENGTH_LONG).show(); 

       } 

       final class MyLocationListener implements LocationListener { 
        @Override 
         public void onLocationChanged(Location location) { 
          String message = String.format(
           "New Location \n Longitude: %1$s \n Latitude: %2$s", 
          location.getLongitude(), location.getLatitude() 
          ); 
           Toast.makeText(WeatherAppActivity.this, message, Toast.LENGTH_LONG).show(); 
         } 
        @Override 
         public void onStatusChanged(String s, int i, Bundle b) { 
           Toast.makeText(WeatherAppActivity.this, "Provider status changed", 
            Toast.LENGTH_LONG).show(); 
          } 
        @Override 
         public void onProviderDisabled(String s) { 
          Toast.makeText(WeatherAppActivity.this, 
            "Provider disabled by the user. GPS turned off", 
             Toast.LENGTH_LONG).show(); 
          } 
        @Override 
         public void onProviderEnabled(String s) { 
          Toast.makeText(WeatherAppActivity.this, 
            "Provider enabled by the user. GPS turned on", 
             Toast.LENGTH_LONG).show(); 
          } 

       }       






} 

}

Это также в моем манифесте:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> 

Я обновил этот код, как я сделал несколько изменений

+0

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

+0

Где у вас есть ''? Попробуйте его после '' – JanOlMajti

+0

Да, он находится под, и все, что он показывает в logcat, это E/AndroidRuntime (340): \t ... еще 11 – user1234167

ответ

2

Вот один пример работы базовой GPS деятельности:

public class UseGpsActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    LocationListener mlocListener = new MyLocationListener(); 

    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 

    } 
    /* Class My Location Listener */ 

public class MyLocationListener implements LocationListener{ 

    @Override 
    public void onLocationChanged(Location loc) { 
     // TODO Auto-generated method stub 
     double lati = loc.getLatitude(); 
     double longi = loc.getLongitude(); 

     String Text = "My current location is: " + "Latitud = " + lati + "Longitud = " + longi; 
     Toast.makeText(getApplicationContext(),Text,Toast.LENGTH_SHORT).show(); 

    } 

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

    } 

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

    } 

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

    } 
    } 
} 
0

Если только какой-то код отсутствует в вашем сообщении MyLocationListener (вы не должны вводить идентификаторы верхнего регистра пользователя для полей экземпляра!) не инициализируется при передаче ссылки (то есть null) до requestLocationUpdates().

0

Вам не нужно, чтобы создать другой LocationListener, заявление

WeatherAppActivity extends Activity implements LocationListener 

и переопределены методы

@Override 
public void onLocationChanged(Location location) 

и т. Д. Означает, что у вас уже есть один в своем основном классе, поэтому избавитесь от внутреннего класса MyLocationListener полностью.

Поместите свой код тоста и т. Д. Внутри методов прослушивания в основном классе.

Тогда в OnCreate() имеет:

locationManager.requestLocationUpdates(
    locationManager.GPS_PROVIDER, 
    MINIMUM_TIME_BETWEEN_UPDATES, 
    MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
    this 
); 
0

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

http://www.scotthelme.co.uk/blog/android-location-services/

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