API 10 (Google API)을 사용해서 GPS 좌표를 화면에 찍기 위한 Sample 코드를 만들어 보고 있습니다..
그런데.. 자꾸.. 제가 만든 App.이 죽네요..
그래서 디버깅을 해보니..
String provider = mLocationManager.getBestProvider(criteria, true);
요기서 provider return값이 null 이여서 자꾸 죽네요.
원래 기대값은.. "gps", "network" 같은.. 게 나와야 하는것 같은데..
왜 이런걸까요...??
AVD를 만들때 GPS Support도 추가했고.. 세팅에서 GPS도 ON했고.. 시간도 연관이 있을 수 있다고 해서 Seoul로 설정했고..
도대체 왜 이런걸까요..? 4일째 이것만 디버깅 하고 있는데.. 도움 부탁드립니다~~
제 소스는 아래와 같습니다..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package kr.ac.kaist.frescagps;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class FrescaGPSActivity extends Activity implements LocationListener{
/** Called when the activity is first created. */
private LocationManager mLocationManager = null;
Geocoder mGeocoder;
private Location mLocation = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mGeocoder = new Geocoder(this, Locale.KOREAN);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.NO_REQUIREMENT);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
Button button_get_gps = (Button) findViewById(R.id.button1);
button_get_gps.setOnClickListener(new OnClickListener()
{
public void onClick(View v) {
// TODO Auto-generated method stub
EditText edittext_gpsinfo = (EditText) findViewById(R.id.editText1);
edittext_gpsinfo.setText("");
}
});
String provider = mLocationManager.getBestProvider(criteria, false);
if(provider != null)
{
Log.e("Fresca", "Man1");
mLocationManager.requestLocationUpdates(provider, 1000, 5, this);
mLocation = mLocationManager.getLastKnownLocation(provider);
updateWithNewLocation(mLocation);
}
else
{
updateWithNewLocation(mLocation);
}
}
private void updateWithNewLocation(Location location) {
String mLatLonString;
EditText mLocationText = (EditText) findViewById(R.id.editText1);
if(location != null) {
double lat = location.getLatitude();
double lon = location.getLongitude();
mLatLonString = "Latitude :" + lat + "\nLongitude :" + lon;
} else {
mLatLonString = "Can't find your location";
}
mLocationText.setText("Location : " + mLatLonString);
}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
updateWithNewLocation(null);
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
도와주십쇼~~~~~~




순서가 바뀐것 같아요. 고쳐놨습니다~ 고대로 복사 하시면 될듯.
package com.example.test.gps;
import android.app.Activity;
import android.content.Context;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class HelloGPSActivity extends Activity implements LocationListener {
/** Called when the activity is first created. */
private LocationManager mLocationManager = null;
Geocoder mGeocoder;
private Location mLocation = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.NO_REQUIREMENT);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
String provider = mLocationManager.getBestProvider(criteria, false);
if (provider != null) {
Log.e("Fresca", "Man1");
mLocationManager.requestLocationUpdates(provider, 1000, 5, this);
mLocation = mLocationManager.getLastKnownLocation(provider);
updateWithNewLocation(mLocation);
} else {
updateWithNewLocation(mLocation);
}
Button button_get_gps = (Button) findViewById(R.id.button1);
button_get_gps.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
EditText edittext_gpsinfo = (EditText) findViewById(R.id.editText1);
edittext_gpsinfo.setText("");
}
});
}
private void updateWithNewLocation(Location location) {
String mLatLonString;
EditText mLocationText = (EditText) findViewById(R.id.editText1);
if (location != null) {
double lat = location.getLatitude();
double lon = location.getLongitude();
mLatLonString = "Latitude :" + lat + "\nLongitude :" + lon;
} else {
mLatLonString = "Can't find your location";
}
mLocationText.setText("Location : " + mLatLonString);
System.out.println(mLatLonString);
}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
// updateWithNewLocation(null);
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}