Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

167 changes: 167 additions & 0 deletions app/src/main/java/com/greener/HotelMap.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package com.greener;

import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
Expand All @@ -10,9 +17,12 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;

import com.google.firebase.database.DataSnapshot;
Expand All @@ -33,10 +43,20 @@
import com.naver.maps.map.overlay.OverlayImage;
import com.naver.maps.map.util.FusedLocationSource;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import static android.content.Context.LOCATION_SERVICE;

public class HotelMap extends Fragment implements OnMapReadyCallback {

private GPSTracker gpsTracker;

private static final int GPS_ENABLE_REQUEST_CODE = 2001;
private static final int PERMISSIONS_REQUEST_CODE = 100;
String[] REQUIRED_PERMISSIONS = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};

private MapView mapView;
private DatabaseReference databaseReference;
private NaverMap naverMap;
Expand All @@ -47,11 +67,18 @@ public class HotelMap extends Fragment implements OnMapReadyCallback {

private View view;
private Button btn;
private Context mContext;

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mLocationSource = new FusedLocationSource(this, 100);

mContext = getContext();

if (!checkLocationServicesStatus()) {
showDialogForLocationServiceSetting();
}else { checkRunTimePermission(); }
}

@Nullable
Expand Down Expand Up @@ -100,6 +127,9 @@ public void onClick(View v) {
double latitude = gpsTracker.getLatitude();
double longitude = gpsTracker.getLongitude();

String addrStr = getCurrentAddress(latitude, longitude);
System.out.println("addrStr : " + addrStr);

CameraPosition cameraPosition = new CameraPosition(new LatLng(latitude, longitude), 13);
naverMap.setCameraPosition(cameraPosition);
}
Expand Down Expand Up @@ -154,4 +184,141 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.actionbar_map_action, menu);
}

public String getCurrentAddress( double latitude, double longitude) {
Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());
List<Address> addresses;
try {
addresses = geocoder.getFromLocation(latitude, longitude, 7);
} catch (IOException ioException) {
Toast.makeText(getContext(), "지오코더 서비스 사용불가", Toast.LENGTH_LONG).show();
return "지오코더 서비스 사용불가";
} catch (IllegalArgumentException illegalArgumentException) {
Toast.makeText(getContext(), "잘못된 GPS 좌표", Toast.LENGTH_LONG).show();
return "잘못된 GPS 좌표";

}
if (addresses == null || addresses.size() == 0) {
Toast.makeText(getContext(), "주소 미발견", Toast.LENGTH_LONG).show();
return "주소 미발견";

}

Address address = addresses.get(0);
return address.getAddressLine(0).toString()+"\n";

}

@Override
public void onRequestPermissionsResult(int permsRequestCode, @NonNull String[] permissions, @NonNull int[] grandResults) {

if ( permsRequestCode == PERMISSIONS_REQUEST_CODE && grandResults.length == REQUIRED_PERMISSIONS.length) {

boolean check_result = true;

for (int result : grandResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
check_result = false;
break;
}
}

if ( check_result ) { }
else {

if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), REQUIRED_PERMISSIONS[0])
|| ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), REQUIRED_PERMISSIONS[1])) {

Toast.makeText(getContext(), "퍼미션이 거부되었습니다. 앱을 다시 실행하여 퍼미션을 허용해주세요.", Toast.LENGTH_LONG).show();



}else {

Toast.makeText(getContext(), "퍼미션이 거부되었습니다. 설정(앱 정보)에서 퍼미션을 허용해야 합니다. ", Toast.LENGTH_LONG).show();

}
}

}
}

void checkRunTimePermission(){
int hasFineLocationPermission = ContextCompat.checkSelfPermission(getContext(),
Manifest.permission.ACCESS_FINE_LOCATION);
int hasCoarseLocationPermission = ContextCompat.checkSelfPermission(getContext(),
Manifest.permission.ACCESS_COARSE_LOCATION);


if (hasFineLocationPermission == PackageManager.PERMISSION_GRANTED &&
hasCoarseLocationPermission == PackageManager.PERMISSION_GRANTED) {

} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), REQUIRED_PERMISSIONS[0])) {

Toast.makeText(getContext(), "이 앱을 실행하려면 위치 접근 권한이 필요합니다.", Toast.LENGTH_LONG).show();
ActivityCompat.requestPermissions(getActivity(), REQUIRED_PERMISSIONS,
PERMISSIONS_REQUEST_CODE);

} else {
ActivityCompat.requestPermissions(getActivity(), REQUIRED_PERMISSIONS,
PERMISSIONS_REQUEST_CODE);
}

}

}

private void showDialogForLocationServiceSetting() {

AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
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
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case GPS_ENABLE_REQUEST_CODE:

//사용자가 GPS 활성 시켰는지 검사
if (checkLocationServicesStatus()) {
if (checkLocationServicesStatus()) {
checkRunTimePermission();
return;
}
}

break;
}
}

public boolean checkLocationServicesStatus() {
LocationManager locationManager;
locationManager = (LocationManager)mContext.getSystemService(LOCATION_SERVICE);

return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}
}
Loading