마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

[초보]응급구조 어플 제작중 오류로 진행이 막혔습니다. 도와주세요!

0 추천
W/System.err(9646): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(9646): at android.os.Looper.loop(Looper.java:137)
W/System.err(9646): at android.app.ActivityThread.main(ActivityThread.java:4921)
W/System.err(9646): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(9646): at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(9646): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
W/System.err(9646): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
W/System.err(9646): at dalvik.system.NativeStart.main(Native Method)
W/System.err(9646): java.io.IOException: Service not Available
W/System.err(9646): at android.location.Geocoder.getFromLocation(Geocoder.java:136)
W/System.err(9646): at com.example.nam.run.onSensorChanged(run.java:160)
W/System.err(9646): at android.hardware.SystemSensorManager
$ListenerDelegate$1.handleMessage(SystemSensorManager.java:250)
W/System.err(9646): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(9646): at android.os.Looper.loop(Looper.java:137)
W/System.err(9646): at android.app.ActivityThread.main(ActivityThread.java:4921)
W/System.err(9646): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(9646): at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(9646): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
W/System.err(9646): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
W/System.err(9646): at dalvik.system.NativeStart.main(Native Method)
E/SpannableStringBuilder(9646): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder(9646): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
-------------------------------------------------------------------------

public class run extends Activity implements SensorEventListener {
    private long lastTime;
    private float speed;
    private float lastX;
    private float lastY;
    private float x, y;
    private static final int SHAKE_THRESHOLD = 150;// 테스트를 위해 0 하나 뺌
    private static final int DATA_X = SensorManager.AXIS_X;
    private static final int DATA_Y = SensorManager.AXIS_Y;
    private static boolean chek;
    public String text;
    private SensorManager sensorManager;
    private Sensor accelerormeterSensor;
 
    @SuppressLint("NewApi")
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
    setContentView(R.layout.safe);
    SharedPreferences pref = getSharedPreferences("pref",
                Activity.MODE_PRIVATE);
    EditText edit1 = (EditText) this.findViewById(R.id.text1);
    CheckBox check1 = (CheckBox) findViewById(R.id.CheckBox1);
    text = pref.getString("editText", ""); // 저장된 값 불러오기
        chek = pref.getBoolean("check1", false);
        if (text.isEmpty()) {
    Toast.makeText(getBaseContext(), "전화번호가 등록되어있지않습니다",
                    Toast.LENGTH_SHORT).show();
            finish();
        }
        if (!(chek)) {
    Toast.makeText(getBaseContext(), "설정되어있지않습니다", Toast.LENGTH_SHORT)
                .show();
        finish();
        }
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        accelerormeterSensor = sensorManager
            .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }
 
    @Override
    public void onStart() {
        super.onStart();
        if (accelerormeterSensor != null)
        sensorManager.registerListener(this, accelerormeterSensor,
                    SensorManager.SENSOR_DELAY_GAME);
    }
    @Override
    public void onStop() {
        super.onStop();
        if (sensorManager != null)
            sensorManager.unregisterListener(this);
        finish();
    }
 
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
 
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            long currentTime = System.currentTimeMillis();
            long gabOfTime = (currentTime - lastTime);
            if (gabOfTime > 100) {
                lastTime = currentTime;
                x = event.values[0];
                y = event.values[1];
               
    speed = Math.abs(x + y - lastX - lastY ) / gabOfTime
                        * 10000;
        if (speed > SHAKE_THRESHOLD) {
                // 이벤트 발생!!
            LocationManager locationManager;
            String context = Context.LOCATION_SERVICE;
    locationManager = (LocationManager) getSystemService(context);
 
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_COARSE);// 정확도
    criteria.setPowerRequirement(Criteria.POWER_LOW); // 전원 소비량
    criteria.setAltitudeRequired(false); // 고도 사용여부
    criteria.setBearingRequired(true); //
        criteria.setSpeedRequired(true); // 속도
    criteria.setCostAllowed(true); // 금전적비용
 
String provider = locationManager.getBestProvider(criteria,
                            true);
        Location location = locationManager
            .getLastKnownLocation(provider);
 
            double latitude = location.getLatitude(); // 위도
            double longitude = location.getLongitude(); // 경도
 
        Geocoder gcK = new Geocoder(getApplicationContext(),
                            Locale.KOREA);
                     
            float Bearing   = location.getBearing();
            float Speed     = location.getSpeed();
                }
                 
            else if(speed < 100) {
                         
    LocationManager locationManager;
    String context = Context.LOCATION_SERVICE;
    locationManager = (LocationManager) getSystemService(context);
 
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_COARSE);// 정확도
    criteria.setPowerRequirement(Criteria.POWER_LOW); // 전원 소비량
    criteria.setAltitudeRequired(false); // 고도 사용여부
    criteria.setBearingRequired(true); //
    criteria.setSpeedRequired(true); // 속도
    criteria.setCostAllowed(true); // 금전적비용
 
    String provider = locationManager.getBestProvider(criteria,
                                true);
            Location location = locationManager
            .getLastKnownLocation(provider);
 
        double latitude = location.getLatitude(); // 위도
        double longitude = location.getLongitude(); // 경도
 
        Geocoder gcK = new Geocoder(getApplicationContext(),
                Locale.KOREA);
                         
            float Bearing   = location.getBearing();
            float Speed     = location.getSpeed();
                         
                     
                     
            try {
    List<Address> addresses = gcK.getFromLocation(latitude,
                            longitude, 1);
            StringBuilder sb = new StringBuilder();
            if (addresses.size() > 0) {
            for (Address addr : addresses) {
            sb.append(addr.getMaxAddressLineIndex())
                .insert(0, "-살려주세요-\n");
            for (int i = 0; i < addr
                    .getM
교통 사고시 흔들림과 속도 변화를 잡아서 
 
자동으로 구조 메세지 보내는 어플을 .
졸업 작품으로 내려고 준비중인 생초보 학생입니다.
 
여러 블로그 글과 오픈소스 그리고 예제를 읽어가며 만들어 보았는대 
 List<Address> addresses = gcK.getFromLocation(latitude,
                                longitude, 1);
에서 시스템 에러가 떠버립니다.@_@;;
at com.example.nam.run.onSensorChanged(run.java:160
 
개발자님들 도와주세요!
 
이전에 초보개발자ㅠ님께서 도와주셨는대 제가 답글을 늦게 올린 것 때문에 
 
초보개발자ㅠ님의 답글이 늦으시는 것 같으셔서 이렇게 따로 올립니다.
 
양해부탁드립니다.
AErun (200 포인트) 님이 2014년 6월 2일 질문

2개의 답변

0 추천
위도와 경도로 주소를 얻으려고 하시는것 같은데요..

네이버나 다음에서 제공하는 api를 쓰시는게 좋습니다.

저도 예전에 getFromLocatoin으로 해보니까 잘 안되더라고요..

구글에서 네이버 지도 api로 검색하시면 됩니다. ^^
지미라 (4,330 포인트) 님이 2014년 6월 2일 답변
친절한 댓글 감사합니다. ^^
한번 시도해봐야겠어요.
0 추천

http://stackoverflow.com/questions/15110528/service-not-available-while-calling-geocoder-getfromlocation

같은 사항이 있길래.., 전 영어가 짧아서^^; 참고하세요.

코딩인헬 (12,150 포인트) 님이 2014년 6월 2일 답변
ㄷㄷ 영어;;;
댓글 감사합니다 ㅋ
역시 영문 검색은 정보가 다르내요.
...