혹시 아시는분이 계실까 해서 문의 드립니다.

 

먼저 제가 보유하고 있는 기기는 옵티머스빅 그리고 아이덴티티탭이라고 일명 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파일을 첨부합니다.