1

GPSで現在地を取得しようとしています。しかし、アプリケーションが予期せず終了します。理由がわかりません。AndroidManifest.xml で権限を追加しました。

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

私が試しているコードは次のとおりです。

public class MainActivity extends Activity {

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void getLoc()
{
    LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);          
    LocationListener listener = new MyLocationListener();
    manager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 5000, 10, listener);
}

public class MyLocationListener implements LocationListener    {
@Override

public void onLocationChanged(Location loc) 
{
    loc.getLatitude();
    loc.getLongitude();
    String Text = "My current location is: " + "Latitude = " + loc.getLatitude() + "Longitude = " + loc.getLongitude();
    Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();
}

@Override

public void onProviderDisabled(String provider)
{
    Toast.makeText( getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT ).show();
}

@Override

public void onProviderEnabled(String provider)
{
    Toast.makeText( getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show();
}

@Override

public void onStatusChanged(String provider, int status, Bundle extras)
{        }
}

}

4

2 に答える 2

1

これを試してください、それはあなたを助けるかもしれません

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

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



public class MyLocationListener implements LocationListener {

@Override
public void onLocationChanged(Location loc) {
    loc.getLatitude();
    loc.getLongitude();

    Geocoder gcd = new Geocoder(getApplicationContext(),
            Locale.getDefault());
    try {
        mAddresses = gcd.getFromLocation(loc.getLatitude(),
                loc.getLongitude(), 1);

    } catch (IOException e) {

    }

    String cityName = (mAddresses != null) ? mAddresses.get(0)
            .getLocality() : TimeZone.getDefault().getID();
    String countryName = (mAddresses != null) ? mAddresses.get(0)
            .getCountryName() : Locale.getDefault().getDisplayCountry()
            .toString();


    mCurrentSpeed.setText(loc.getSpeed());
}

@Override
public void onProviderDisabled(String provider) {
    Toast.makeText(getApplicationContext(), "Gps Disabled",
            Toast.LENGTH_SHORT).show();
}

@Override
public void onProviderEnabled(String provider) {
    Toast.makeText(getApplicationContext(), "Gps Enabled",
            Toast.LENGTH_SHORT).show();
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
于 2012-11-24T19:12:30.437 に答える
1

これを試して。まず、このコードをシンプルにします。

この行を onCreate 内に追加してください。onCreate で呼び出された getloc メソッドが表示されないためです。

LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);          
    LocationListener listener = new MyLocationListener();
    manager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 5000, 10, listener);

テストのために、これらの値を 0 に変更します

manager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, listener);

このメソッドで onLocationChange を変更します。

public void onLocationChanged(Location location) {
    int lat = (int) (location.getLatitude());
    int lng = (int) (location.getLongitude());
    latituteField.setText(String.valueOf(lat));
    longitudeField.setText(String.valueOf(lng));
  }

またはこのリンクを試してください

于 2012-11-24T17:30:49.673 に答える