Tech. Forum 개발자들을 위한 정보 공유의 장입니다
닫기

Tech.Forum

현재 위치 미인식 문의합니다

#1

AndroidManifest.xml에 permission이 추가가 되어있음에도 불구하고
계속 mLocationListener로 가지 않아 다시 문의드립니다.
확인부탁드립니다. 감사합니다.

appkey를 발급받은 프로젝트 명: test2
appkey를 발급받은 프로젝트 코드: project_55880325

현재 위치 관련 소스
package com.example.eunsil.mapproject2;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;

import com.skt.Tmap.TMapView;

public class MainActivity extends Activity {
TMapView tmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayoutTmap = (LinearLayout) findViewById(R.id.linearLayoutTmap);

    tmap = new TMapView(this);

    tmap.setSKTMapApiKey("발급받은 app key");

    linearLayoutTmap.addView(tmap);

    //TMapData tmapdata = new TMapData();

    tmap.setIconVisibility(true);//현재위치로 표시될 아이콘을 표시할지 여부를 설정합니다.

    if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED){

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 1); //위치권한 탐색 허용 관련 내용
        }
        return;
    }
    setGps();

}

private final LocationListener mLocationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
        Log.i("이이이","이이이");
        //현재위치의 좌표를 알수있는 부분
        if (location != null) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            tmap.setLocationPoint(longitude, latitude);
            tmap.setCenterPoint(longitude, latitude);
            Log.d("test", longitude+","+latitude);

        }

    }

    public void onProviderDisabled(String provider) {
    }

    public void onProviderEnabled(String provider) {
    }

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

public void setGps() {
    final LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    }
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, // 등록할 위치제공자(실내에선 NETWORK_PROVIDER 권장)
            1000, // 통지사이의 최소 시간간격 (miliSecond)
            1, // 통지사이의 최소 변경거리 (m)
            mLocationListener);
}

}

0 Likes

#2

안녕하세요.
T map API 운영담당자 입니다.

보내주신 내용을 토대로 테스트 해본 결과 앱이 위치권한에 대해 요청시 응답처리 부분을 처리하지 않아 현재위치를 가져올 수 있는 함수 실행이 작동하지 않은 것이 원인으로 파악됩니다.

아래 소스는 위치권한 요청시 권한 요청 응답처리를 추가하여 현재위치를 나타내는 예제입니다. 참고하시면 도움이 되실 겁니다. ---------------------- public class MainActivity extends Activity { TMapView tmap; public final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    LinearLayout linearLayoutTmap = (LinearLayout) findViewById(R.id.linearLayoutTmap);

    tmap = new TMapView(this);

    tmap.setSKTMapApiKey("발급받은 appKey를 입력하세요.");

    linearLayoutTmap.addView(tmap);

    tmap.setIconVisibility(true);//현재위치로 표시될 아이콘을 표시할지 여부를 설정합니다.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 1); //위치권한 탐색 허용 관련 내용
        Log.d("locationTest","동의알림");
    }

}

private final LocationListener mLocationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
        Log.d("locationTest","onLocationChanged");
        //현재위치의 좌표를 알수있는 부분
        if (location != null) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            tmap.setLocationPoint(longitude, latitude);
            tmap.setCenterPoint(longitude, latitude);
            Log.d("locationTest", longitude+","+latitude);

        }

    }

    public void onProviderDisabled(String provider) {
    }
    public void onProviderEnabled(String provider) {
    }

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

public void setGps() {

    Log.d("locationTest","setGps");
    final LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    }
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, // 등록할 위치제공자(실내에선 NETWORK_PROVIDER 권장)
            1000, // 통지사이의 최소 시간간격 (miliSecond)
            1, // 통지사이의 최소 변경거리 (m)
            mLocationListener);
}


@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {

    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                setGps();

            } else {
                Log.d("locationTest","동의거부함");
            }
            return;
        }


    }
}

}

감사합니다.

0 Likes