혹시 아시는분이 계실까 해서 문의 드립니다.
먼저 제가 보유하고 있는 기기는 옵티머스빅 그리고 아이덴티티탭이라고 일명 K패드라 하여 KT에서 판매영업을 했으나 제조사가 망하여 커널소스조차 없는 탭입니다.
그 기기에 GpsStatus.NmeaListener를 이용하여 NMEA 0183 신호를 받아오려고 옙을 예제를 보고 실행했습니다.
탭에서는 이렇게 Log.w("SSS","~~~~~~~~~~~~~~~~~~~~"); 를 public void onNmeaReceived(long ti... 바로아래
넣어줬음에도 전혀 로그가 찍히지 않아 GpsStatus.NmeaListener의 기능자체가 무효화된것이 아닌가 하는 생각마저 듭니다.
그렇다고 기기자체가 GPS를 못잡는게 아니고 GPS Status등 유명한 옙을 실행하면 정상적으로 위성을 다 잡습니다.
같은 옙을 사용시 옵티머스빅을 비롯한 스카이 더블류등 정상적인 NMEA 신호가 들어오는것이 보였습니다.
만약 정말 제조사에서 GpsStatus.NmeaListener을 무효화하였다면 어떤것을 수정해야 쓸수있을까요..
몇일동안 연구해보면서 services.jar 이나 Framework.jar등이 의심스럽긴합니다만. 혹시 감이 오시는분 답글좀 부탁드려봅니다.
------------------------- 아래는 소스입니다 ---------------------------------
public class TstGPSActivity extends Activity {
//private LocationManager lm;
private LocationListener locListenD;
public EditText etLatitude;
public EditText etLongitude;
public EditText etAccuracy;
public EditText etSpeed;
public EditText etAltitude;
public EditText etBearing;
public EditText etSatellites;
public EditText etNmea0183;
private class MyNmeaListener implements GpsStatus.NmeaListener {
public void onNmeaReceived(long timestamp, String nmea) {
Log.w("SSS","~~~~~~~~~~~~~~~~~~~~");
Editable e = etNmea0183.getText();
int len = e.length();
if(len > 5000) {
e.delete(0, 2500);
}
e.append(nmea);
len = e.length();
etNmea0183.setSelection(len-1, len-1);
if(nmea.startsWith("$GPGGA")) {
String tokens[] = nmea.split(",");
etSatellites.setText(tokens[7]);
}
}
};
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
etLatitude.setText(Double.toString(location.getLatitude()));
etLongitude.setText(Double.toString(location.getLongitude()));
etAccuracy.setText(Float.toString(location.getAccuracy()));
etSpeed.setText(Float.toString(location.getSpeed()));
etAltitude.setText(Double.toString(location.getAltitude()));
etBearing.setText(Float.toString(location.getBearing()));
}
public void onProviderDisabled(String provider) {
Toast.makeText(TstGPSActivity.this, provider + " Disabled", Toast.LENGTH_SHORT).show();
}
public void onProviderEnabled(String provider) {
Toast.makeText(TstGPSActivity.this, provider + " Enabled", Toast.LENGTH_SHORT).show();
}
public void onStatusChanged(String provider, int status, Bundle extras) {
switch(status) {
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(TstGPSActivity.this, "GPS_EVENT_STARTED", Toast.LENGTH_SHORT).show();
break;
case GpsStatus.GPS_EVENT_STOPPED:
Toast.makeText(TstGPSActivity.this, "GPS_EVENT_STOPPED", Toast.LENGTH_SHORT).show();
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
Toast.makeText(TstGPSActivity.this, "GPS_EVENT_FIRST_FIX", Toast.LENGTH_SHORT).show();
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Toast.makeText(TstGPSActivity.this, "GPS_EVENT_SATELLITE_STATUS", Toast.LENGTH_SHORT).show();
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
//Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
//startActivity(gpsOptionsIntent);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etLatitude = (EditText)findViewById(R.id.etLatitude);
etLongitude = (EditText)findViewById(R.id.etLongitude);
etAccuracy = (EditText)findViewById(R.id.etAccuracy);
etSpeed = (EditText)findViewById(R.id.etSpeed);
etAltitude = (EditText)findViewById(R.id.etAltitude);
etBearing = (EditText)findViewById(R.id.etBearing);
etSatellites = (EditText)findViewById(R.id.etSatellites);
etNmea0183 = (EditText)findViewById(R.id.etNmea0183);
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
etLatitude.setText("DISABLED GPS");
etLongitude.setText("DISABLED GPS");
} else {
Location ll = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(ll != null) {
etLatitude.setText(Double.toString(ll.getLatitude()));
etLongitude.setText(Double.toString(ll.getLongitude()));
}
MyNmeaListener nmeaListen = new MyNmeaListener();
lm.addNmeaListener(nmeaListen);
locListenD = new MyLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 0.5f, locListenD);
}
}
}
-------------------------------------------------------------------------------------
위의 소스의 apk파일을 첨부합니다.