안녕하세요.

추운날씨에 감기 조심하십시요. ^-^)


아래에 질문글을 올렸는데, 아무런 답변이 없어서 이렇게 다시 갱신하게 되었습니다.

혼자서 해결해볼려고 열심히 코드를 봤는데도, 제 지식의 짧음으로 인해 해결 방법이 생각이 안나네요.


질문 사항은 아래와 같이 정리해 봤습니다.


1. 현재 위치 주소만 가져오는거기때문에 com.google.android.maps을 사용하지 않습니다. 따라서 goole map과 관련된 api 설정도 안했으며, 물론 api key도 입력하지 않았습니다. 맞는거겠죠?


2. Code2에서 Service로 상속받고 Code1에서 startService을 할 경우 Log.d("MyTag", "MyLocation Invoked");의 내용조차 실행되지 않습니다. 왜 그런걸까요? 제가 작성한 코드에 문제가 있는 건가요? 아니면 제가 중요한 무엇인가를 빠뜨린 걸까요?


남는 시간 틈틈이 개발을 하고 있는데, 이부분때문에 하루 이상을 소비하고 있습니다.

구글링을해봐도 맞는 답을 찾기 힘드네요.


알려주시면 정말 감사하겠습니다. ^^)


[Code1]


Button stopService;

...

 stopService = (Button)findViewById(R.id.btn_test2);

...

   stopService.setOnClickListener(new OnClickListener(){        

@Override

public void onClick(View v) {

// 위치정보를 호출합니다.

Intent intent = new Intent(BeSafeActivity.this,MyLocation.class);

startService(intent);

}        

        });

...


[Code2]

package com.android.besafe;


import java.io.IOException;

import java.util.List;

import java.util.Locale;

import android.app.Activity;

import android.content.Context;

import android.location.Address;

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;


public class MyLocation extends Service implements LocationListener{ 

 String provider;

 LocationManager locationManager;

 

@Override

public void onCreate(Bundle savedInstanceState)

 {

super.onCreate(savedInstanceState);

Log.d("MyTag", "MyLocation Invoked");

String context=Context.LOCATION_SERVICE;

locationManager=(LocationManager)getSystemService(context);

Location location = locationManager.getLastKnownLocation(bestProvider());

locationManager.requestLocationUpdates(bestProvider(),1000,0, this);

updateLocation(location);

Log.d("MyTag", "context: "+context);

 }

public String bestProvider(){

Criteria criteria = new Criteria();

criteria.setAccuracy(Criteria.ACCURACY_FINE);

criteria.setAltitudeRequired(false);

criteria.setBearingRequired(false);

criteria.setSpeedRequired(true);

criteria.setCostAllowed(true);

criteria.setPowerRequirement(Criteria.POWER_LOW);

provider = locationManager.getBestProvider(criteria, true);

Log.d("MyTag", "bestProvider() Invoked");

return provider;

}

public void updateLocation(Location location) {

Log.d("MyTag","location: "+location);

if(location!=null){

double latitude = location.getLatitude();

double longitude = location.getLongitude();

List<Address> addresses = null;

Geocoder gc = new Geocoder(this, Locale.getDefault());

try{

addresses = gc.getFromLocation(latitude, longitude, 1);

String now_address = addresses.get(0).getAddressLine(0);

Log.d("MyTag","현재위치: "+now_address);

}catch(IOException e){

e.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}

}

}

protected boolean isRouteDisplayed() {

// TODO Auto-generated method stub

return false;

}


@Override

public void onLocationChanged(Location location) {

// TODO Auto-generated method stub

}


@Override

public void onProviderDisabled(String provider) {

// TODO Auto-generated method stub

}


@Override

public void onProviderEnabled(String provider) {

// TODO Auto-generated method stub

}


@Override

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

// TODO Auto-generated method stub

 @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } }