제가 안드로이드에서 마커를 띄운 다음 커스텀 말풍선 띄우려고하는데 이런 에러가 나서 도저히 에러를 못잡겠네요… 도와주세요
A/zygote: java_vm_ext.cc:534] JNI DETECTED ERROR IN APPLICATION: JNI FindClass called with pending exception java.lang.NullPointerException: Attempt to invoke virtual method ‘android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()’ on a null object reference
java_vm_ext.cc:534] at void net.daum.mf.map.api.MapView.prepareCalloutBalloonImageAndCallback(int, boolean) (MapView.java:2734)
java_vm_ext.cc:534] at void net.daum.mf.map.n.api.internal.NativeMapGraphicsViewGles.onUiEventMapView(net.daum.mf.map.n.api.NativeMapViewUiEvent) (NativeMapGraphicsViewGles.java:-2)
java_vm_ext.cc:534] at void net.daum.android.map.MapView.onUiEvent(net.daum.mf.map.n.api.NativeMapViewUiEvent) (MapView.java:246)
java_vm_ext.cc:534] at void net.daum.android.map.MapView.onDrawFrame(javax.microedition.khronos.opengles.GL10) (MapView.java:191)
java_vm_ext.cc:534] at void net.daum.mf.map.api.MapView.onDrawFrame(javax.microedition.khronos.opengles.GL10) (MapView.java:2356)
java_vm_ext.cc:534] at void android.opengl.alt.GLSurfaceView$GLThread.guardedRun() (GLSurfaceView.java:1381)
java_vm_ext.cc:534] at void android.opengl.alt.GLSurfaceView$GLThread.nativeRun() (GLSurfaceView.java:1181)
java_vm_ext.cc:534] at void net.daum.mf.map.n.api.NativeThread.run() (NativeThread.java:48)
java_vm_ext.cc:534]
java_vm_ext.cc:534] in call to FindClass
java_vm_ext.cc:534] from void net.daum.mf.map.n.api.internal.NativeMapGraphicsViewGles.onUiEventMapView(net.daum.mf.map.n.api.NativeMapViewUiEvent)
java_vm_ext.cc:534] “GLThread 21929” prio=7 tid=43 Runnable
java_vm_ext.cc:534] | group=“main” sCount=0 dsCount=0 flags=0 obj=0x12dc0050 self=0xcb71bc00
java_vm_ext.cc:534] | sysTid=13193 nice=-4 cgrp=default sched=0/0 handle=0xc817f970
java_vm_ext.cc:534] | state=R schedstat=( 0 0 0 ) utm=173 stm=31 core=0 HZ=100
java_vm_ext.cc:534] | stack=0xc807d000-0xc807f000 stackSize=1038KB
java_vm_ext.cc:534] | held mutexes= “mutator lock”(shared held)
java_vm_ext.cc:534] native: #00 pc 002eedcf /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*)+130)
java_vm_ext.cc:534] native: #01 pc 003844db /system/lib/libart.so (art::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits>&, bool, BacktraceMap*, bool) const+206)
java_vm_ext.cc:534] native: #02 pc 00380a57 /system/lib/libart.so (art::Dump(std::__1::basic_ostream<char, std::__1::char_traits>&, bool, BacktraceMap*, bool) const+34)
java_vm_ext.cc:534] native: #03 pc 0025187f /system/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+738)
java_vm_ext.cc:534] native: #04 pc 00251bf7 /system/lib/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+58)
java_vm_ext.cc:534] native: #05 pc 000d7433 /system/lib/libart.so (art::ScopedCheck::AbortF(char const*, …)+46)
java_vm_ext.cc:534] native: #06 pc 000d6fab /system/lib/libart.so (art::ScopedCheck::CheckThread(_JNIEnv*)+274)
java_vm_ext.cc:534] native: #07 pc 000d596d /system/lib/libart.so (art::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::JniValueType*)+596)
java_vm_ext.cc:534] native: #08 pc 000c2567 /system/lib/libart.so (art::CheckJNI::FindClass(_JNIEnv*, char const*)+450)
java_vm_ext.cc:534] native: #09 pc 000cc938 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #10 pc 0008ed00 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #11 pc 0008edc8 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #12 pc 000ac200 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #13 pc 000b1724 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #14 pc 000ad690 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #15 pc 000b5d5c /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #16 pc 0008abb0 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
java_vm_ext.cc:534] native: #17 pc 0000720d /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/oat/arm/base.odex (Java_net_daum_mf_map_n_api_internal_NativeMapGraphicsViewGles_onUiEventMapView__Lnet_daum_mf_map_n_api_NativeMapViewUiEvent_2+92)
java_vm_ext.cc:534] at net.daum.mf.map.n.api.internal.NativeMapGraphicsViewGles.onUiEventMapView(Native method)
A/zygote: java_vm_ext.cc:534] at net.daum.android.map.MapView.onUiEvent(MapView.java:246)
java_vm_ext.cc:534] at net.daum.android.map.MapView.onDrawFrame(MapView.java:191)
java_vm_ext.cc:534] at net.daum.mf.map.api.MapView.onDrawFrame(MapView.java:2356)
java_vm_ext.cc:534] at android.opengl.alt.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1381)
java_vm_ext.cc:534] at android.opengl.alt.GLSurfaceView$GLThread.nativeRun(GLSurfaceView.java:1181)
java_vm_ext.cc:534] at net.daum.mf.map.n.api.NativeThread.run(NativeThread.java:48)
java_vm_ext.cc:534]
runtime.cc:542] Runtime aborting…
runtime.cc:542]
runtime.cc:550] JNI DETECTED ERROR IN APPLICATION: JNI FindClass called with pending exception java.lang.NullPointerException: Attempt to invoke virtual method ‘android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()’ on a null object reference
runtime.cc:550] at void net.daum.mf.map.api.MapView.prepareCalloutBalloonImageAndCallback(int, boolean) (MapView.java:2734)
runtime.cc:550] at void net.daum.mf.map.n.api.internal.NativeMapGraphicsViewGles.onUiEventMapView(net.daum.mf.map.n.api.NativeMapViewUiEvent) (NativeMapGraphicsViewGles.java:-2)
runtime.cc:550] at void net.daum.android.map.MapView.onUiEvent(net.daum.mf.map.n.api.NativeMapViewUiEvent) (MapView.java:246)
runtime.cc:550] at void net.daum.android.map.MapView.onDrawFrame(javax.microedition.khronos.opengles.GL10) (MapView.java:191)
runtime.cc:550] at void net.daum.mf.map.api.MapView.onDrawFrame(javax.microedition.khronos.opengles.GL10) (MapView.java:2356)
runtime.cc:550] at void android.opengl.alt.GLSurfaceView$GLThread.guardedRun() (GLSurfaceView.java:1381)
runtime.cc:550] at void android.opengl.alt.GLSurfaceView$GLThread.nativeRun() (GLSurfaceView.java:1181)
runtime.cc:550] at void net.daum.mf.map.n.api.NativeThread.run() (NativeThread.java:48)
runtime.cc:550]
runtime.cc:550] in call to FindClass
runtime.cc:550] from void net.daum.mf.map.n.api.internal.NativeMapGraphicsViewGles.onUiEventMapView(net.daum.mf.map.n.api.NativeMapViewUiEvent)
runtime.cc:550] “GLThread 21929” prio=7 tid=43 Runnable
runtime.cc:550] | group=“main” sCount=0 dsCount=0 flags=0 obj=0x12dc0050 self=0xcb71bc00
runtime.cc:550] | sysTid=13193 nice=-4 cgrp=default sched=0/0 handle=0xc817f970
runtime.cc:550] | state=R schedstat=( 0 0 0 ) utm=173 stm=31 core=0 HZ=100
runtime.cc:550] | stack=0xc807d000-0xc807f000 stackSize=1038KB
runtime.cc:550] | held mutexes= “mutator lock”(shared held)
runtime.cc:550] native: #00 pc 002eedcf /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*)+130)
runtime.cc:550] native: #01 pc 003844db /system/lib/libart.so (art::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits>&, bool, BacktraceMap*, bool) const+206)
runtime.cc:550] native: #02 pc 00380a57 /system/lib/libart.so (art::Dump(std::__1::basic_ostream<char, std::__1::char_traits>&, bool, BacktraceMap*, bool) const+34)
runtime.cc:550] native: #03 pc 0025187f /system/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+738)
runtime.cc:550] native: #04 pc 00251bf7 /system/lib/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+58)
runtime.cc:550] native: #05 pc 000d7433 /system/lib/libart.so (art::ScopedCheck::AbortF(char const*, …)+46)
runtime.cc:550] native: #06 pc 000d6fab /system/lib/libart.so (art::ScopedCheck::CheckThread(_JNIEnv*)+274)
runtime.cc:550] native: #07 pc 000d596d /system/lib/libart.so (art::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::JniValueType*)+596)
runtime.cc:550] native: #08 pc 000c2567 /system/lib/libart.so (art::CheckJNI::FindClass(_JNIEnv*, char const*)+450)
runtime.cc:550] native: #09 pc 000cc938 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #10 pc 0008ed00 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #11 pc 0008edc8 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #12 pc 000ac200 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #13 pc 000b1724 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #14 pc 000ad690 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #15 pc 000b5d5c /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #16 pc 0008abb0 /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/base.apk (???)
runtime.cc:550] native: #17 pc 0000720d /data/app/com.mjinfo.lx-VwbMwcgHBbPubM-D6BY8lw==/oat/arm/base.odex (Java_net_daum_mf_map_n_api_internal_NativeMapGraphicsViewGles_onUiEventMapView__Lnet_daum_mf_map_n_api_NativeMapViewUiEvent_2+92)
runtime.cc:550] at net.daum.mf.map.n.api.internal.NativeMapGraphicsViewGles.onUiEventMapView(Native method)
runtime.cc:550] at net.daum.android.map.MapView.onUiEvent(MapView.java:246)
runtime.cc:550] at net.daum.android.map.MapView.onDrawFrame(MapView.java:191)
runtime.cc:550] at net.daum.mf.map.api.MapView.onDrawFrame(MapView.java:2356)
runtime.cc:550] at android.opengl.alt.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1381)
runtime.cc:550] at android.opengl.alt.GLSurfaceView$GLThread.nativeRun(GLSurfaceView.java:1181)
runtime.cc:550] at net.daum.mf.map.n.api.NativeThread.run(NativeThread.java:48)
runtime.cc:550]
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 13193 (GLThread 21929), pid 13025 (com.mjinfo.lx)
A/zygote: runtime.cc:550]
제 소스입니다.
package com.mjinfo.lx.landon.survrect;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.mjinfo.lx.R;
import com.mjinfo.lx.landon.survrect.vo.SurvrectVO;
import com.mjinfo.lx.landon.util.BaseActivityLandon;
import net.daum.mf.map.api.CalloutBalloonAdapter;
import net.daum.mf.map.api.MapPOIItem;
import net.daum.mf.map.api.MapPoint;
import net.daum.mf.map.api.MapView;
import java.util.ArrayList;
public class SurveyListMap extends BaseActivityLandon implements View.OnClickListener, MapView.MapViewEventListener {
private Button btnbranchMapBack, btnLocation;
private static final int GPS_ENABLE_REQUEST_CODE = 2001;
private static final int PERMISSIONS_REQUEST_CODE = 100;
String[] REQUIRED_PERMISSIONS = {android.Manifest.permission.ACCESS_FINE_LOCATION};
private ViewGroup mapViewContainer;
private MapView mapView;
private MapPoint.GeoCoordinate mapPointGeo;
public static Context context;
public SurveyListMap activity;
private static final String LOG_TAG = “SurveyListMap”;
private View mCalloutBalloon;
public SurveyListMap(){
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setContentView(R.layout.landon_activity_syrvey_map);
super.onCreate(savedInstanceState);
mCalloutBalloon = getLayoutInflater().inflate(R.layout.landon_activity_customball, null);
initWidgets();
mapView = new MapView(this);
mapViewContainer = findViewById(R.id.map_view);
mapViewContainer.addView(mapView);
mapView.setCurrentLocationEventListener(currentLocationEventListener);
mapView.setCalloutBalloonAdapter(calloutBalloonAdapter);
mapView.setMapViewEventListener(this);
mapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading);
MapPOIItem marker = new MapPOIItem();
mapView.removePOIItem(marker);
ArrayList<SurvrectVO> list = ((ActivityWorkList) ActivityWorkList.context).arrayItem;
if (((ActivityWorkList) ActivityWorkList.context).arrayItem != null) {
for (int i = 0; i < ((ActivityWorkList) ActivityWorkList.context).arrayItem.size(); i++) {
//맵 포인트 위도경도 설정
MapPoint mapPoint = MapPoint.mapPointWithGeoCoord(Double.parseDouble(list.get(i).getLatitude()), Double.parseDouble(list.get(i).getLongitude()));
marker.setItemName("Default Marker");
marker.setTag(0);
marker.setMapPoint(mapPoint);
marker.setMarkerType(MapPOIItem.MarkerType.RedPin); // 기본으로 제공하는 BluePin 마커 모양.
marker.setSelectedMarkerType(MapPOIItem.MarkerType.RedPin); // 마커를 클릭했을때, 기본으로 제공하는 RedPin 마커 모양.
//맵 포인트 위도경도 설정
mapView.addPOIItem(marker);
}
}
if (!checkLocationServicesStatus()) {
showDialogForLocationServiceSetting();
Log.e("@@@", "1111");
} else {
checkRunTimePermission();
Log.e("@@@", "2222");
}
//움직임 감지 시 트래킹모드 on 자동 현재위치찾기x 변경
mapView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float curX = motionEvent.getX();
float curY = motionEvent.getY();
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_UP: {
//TrackingModeOnWithoutHeadingWithoutMapMoving 트래킹모드는 on 움직임 off
mapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeadingWithoutMapMoving);
return false;
}
default:
return false;
}
}
});
}
CalloutBalloonAdapter calloutBalloonAdapter = new CalloutBalloonAdapter() {
@Override
public View getCalloutBalloon(MapPOIItem mapPOIItem) {
((TextView) mCalloutBalloon.findViewById(R.id.ball_item_location)).setText(mapPOIItem.getItemName());
((TextView) mCalloutBalloon.findViewById(R.id.ball_item_name)).setText("Custom CalloutBalloon");
return mCalloutBalloon;
}
@Override
public View getPressedCalloutBalloon(MapPOIItem mapPOIItem) {
return null;
}
};
private void initWidgets() {
btnbranchMapBack = findViewById(R.id.btn_branch_map_back);
btnLocation = findViewById(R.id.btn_location);
btnLocation.setOnClickListener(this);
btnbranchMapBack.setOnClickListener(this);
}
@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_branch_map_back:
onBackPressed();
break;
case R.id.btn_location: // 현재위치 버튼
if (mapPointGeo != null) {
mapView.setMapCenterPoint(MapPoint.mapPointWithGeoCoord(mapPointGeo.latitude, mapPointGeo.longitude), true);
}
break;
}
}
@Override
public void onDestroy() {
super.onDestroy();
mapViewContainer.removeAllViews();
Log.e("@@@", "33333");
}
//현재 위치 좌표값 받아오기
MapView.CurrentLocationEventListener currentLocationEventListener = new MapView.CurrentLocationEventListener() {
@Override
public void onCurrentLocationUpdate(MapView mapView, MapPoint currentLocation, float v) {
mapPointGeo = currentLocation.getMapPointGeoCoord();
Log.e(LOG_TAG, String.format("MapView onCurrentLocationUpdate (%f,%f) accuracy (%f)", mapPointGeo.latitude, mapPointGeo.longitude, v));
Log.e("@@@", "444444");
}
@Override
public void onCurrentLocationDeviceHeadingUpdate(MapView mapView, float v) {
}
@Override
public void onCurrentLocationUpdateFailed(MapView mapView) {
Log.e("@@@", "55551155");
}
@Override
public void onCurrentLocationUpdateCancelled(MapView mapView) {
Log.e("@@@", "555555");
}
};
@Override
public void onRequestPermissionsResult(int permsRequestCode,
@NonNull String[] permissions,
@NonNull int[] grandResults) {
Log.d("@@@", "555555");
if (permsRequestCode == PERMISSIONS_REQUEST_CODE && grandResults.length == REQUIRED_PERMISSIONS.length) {
// 요청 코드가 PERMISSIONS_REQUEST_CODE 이고, 요청한 퍼미션 개수만큼 수신되었다면
boolean check_result = true;
// 모든 퍼미션을 허용했는지 체크합니다.
for (int result : grandResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
check_result = false;
break;
}
}
if (check_result) {
Log.d("@@@", "start");
//위치 값을 가져올 수 있음
} else {
// 거부한 퍼미션이 있다면 앱을 사용할 수 없는 이유를 설명해주고 앱을 종료합니다.2 가지 경우가 있다
if (ActivityCompat.shouldShowRequestPermissionRationale(this, REQUIRED_PERMISSIONS[0])) {
Toast.makeText(this, "퍼미션이 거부되었습니다. 앱을 다시 실행하여 퍼미션을 허용해주세요.", Toast.LENGTH_LONG).show();
finish();
} else {
Toast.makeText(this, "퍼미션이 거부되었습니다. 설정(앱 정보)에서 퍼미션을 허용해야 합니다. ", Toast.LENGTH_LONG).show();
}
}
}
}
void checkRunTimePermission() {
Log.e("@@@", "66666");
//런타임 퍼미션 처리
// 1. 위치 퍼미션을 가지고 있는지 체크합니다.
int hasFineLocationPermission = ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION);
if (hasFineLocationPermission == PackageManager.PERMISSION_GRANTED) {
// 2. 이미 퍼미션을 가지고 있다면
// ( 안드로이드 6.0 이하 버전은 런타임 퍼미션이 필요없기 때문에 이미 허용된 걸로 인식합니다.)
// 3. 위치 값을 가져올 수 있음
Log.e("@@@", "7");
} else { //2. 퍼미션 요청을 허용한 적이 없다면 퍼미션 요청이 필요합니다. 2가지 경우(3-1, 4-1)가 있습니다.
// 3-1. 사용자가 퍼미션 거부를 한 적이 있는 경우에는
if (ActivityCompat.shouldShowRequestPermissionRationale(SurveyListMap.this, REQUIRED_PERMISSIONS[0])) {
// 3-2. 요청을 진행하기 전에 사용자가에게 퍼미션이 필요한 이유를 설명해줄 필요가 있습니다.
Toast.makeText(SurveyListMap.this, "이 앱을 실행하려면 위치 접근 권한이 필요합니다.", Toast.LENGTH_LONG).show();
// 3-3. 사용자게에 퍼미션 요청을 합니다. 요청 결과는 onRequestPermissionResult에서 수신됩니다.
ActivityCompat.requestPermissions(SurveyListMap.this, REQUIRED_PERMISSIONS,
PERMISSIONS_REQUEST_CODE);
Log.e("@@@", "8");
} else {
// 4-1. 사용자가 퍼미션 거부를 한 적이 없는 경우에는 퍼미션 요청을 바로 합니다.
// 요청 결과는 onRequestPermissionResult에서 수신됩니다.
ActivityCompat.requestPermissions(SurveyListMap.this, REQUIRED_PERMISSIONS,
PERMISSIONS_REQUEST_CODE);
Log.e("@@@", "9");
}
}
}
//여기부터는 GPS 활성화를 위한 메소드들
private void showDialogForLocationServiceSetting() {
Log.e("@@@", "777777");
android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder(SurveyListMap.this);
builder.setTitle("위치 서비스 비활성화");
builder.setMessage("앱을 사용하기 위해서는 위치 서비스가 필요합니다.\n"
+ "위치 설정을 수정하시겠습니까?");
builder.setCancelable(true);
builder.setPositiveButton("설정", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Intent callGPSSettingIntent
= new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(callGPSSettingIntent, GPS_ENABLE_REQUEST_CODE);
}
});
builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("@@@", "88888");
switch (requestCode) {
case GPS_ENABLE_REQUEST_CODE:
//사용자가 GPS 활성 시켰는지 검사
if (checkLocationServicesStatus()) {
if (checkLocationServicesStatus()) {
Log.d("@@@", "onActivityResult : GPS 활성화 되있음");
checkRunTimePermission();
return;
}
}
break;
}
}
public boolean checkLocationServicesStatus() {
Log.e("@@@", "999999");
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}
@Override
public void onMapViewInitialized(MapView mapView) {
}
@Override
public void onMapViewCenterPointMoved(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewZoomLevelChanged(MapView mapView, int i) {
}
@Override
public void onMapViewSingleTapped(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewDoubleTapped(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewLongPressed(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewDragStarted(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewDragEnded(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewMoveFinished(MapView mapView, MapPoint mapPoint) {
}
}