Toggle navigation
Toggle navigation
This project
Loading...
Sign in
손장민
/
FirebaseAuth
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
손장민
2017-11-15 20:26:07 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
cf2e54eb650ae52e39d759a2590d3523c1d3c7e0
cf2e54eb
1 parent
213e0030
Current Location Editted
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
117 additions
and
132 deletions
app/src/main/java/com/example/user/firebaseauthdemo/Map.java
app/src/main/java/com/example/user/firebaseauthdemo/Map.java
View file @
cf2e54e
...
...
@@ -5,7 +5,9 @@ import android.content.DialogInterface;
import
android.content.Intent
;
import
android.content.pm.PackageManager
;
import
android.location.Location
;
import
android.location.LocationListener
;
import
com.google.android.gms.location.LocationListener
;
import
android.location.LocationManager
;
import
android.os.Build
;
import
android.os.Bundle
;
...
...
@@ -49,13 +51,10 @@ import com.google.android.gms.maps.model.MarkerOptions;
* Created by HYB on 2017. 10. 11..
*/
public
class
Map
extends
Fragment
implements
OnMapReadyCallback
,
GoogleApiClient
.
ConnectionCallbacks
,
GoogleApiClient
.
OnConnectionFailedListener
,
LocationListener
public
class
Map
extends
Fragment
implements
OnMapReadyCallback
,
GoogleApiClient
.
ConnectionCallbacks
,
GoogleApiClient
.
OnConnectionFailedListener
,
LocationListener
{
private
Location
lastLocation
;
private
static
final
LatLng
DEFAULT_LOCATION
=
new
LatLng
(
37.56
,
126.97
);
private
static
final
String
TAG
=
"googlemap_example"
;
private
static
final
int
GPS_ENABLE_REQUEST_CODE
=
2001
;
...
...
@@ -79,12 +78,15 @@ public class Map extends Fragment
}
public
void
setCurrentLocation
(
Location
location
,
String
markerTitle
,
String
markerSnippet
)
{
if
(
currentMarker
!=
null
)
currentMarker
.
remove
();
if
(
location
!=
null
)
{
public
void
setCurrentLocation
(
Location
location
,
String
markerTitle
,
String
markerSnippet
)
{
if
(
currentMarker
!=
null
)
{
currentMarker
.
remove
();
}
if
(
location
!=
null
)
{
Log
.
i
(
TAG
,
" Got my Loc!! "
);
//현재위치의 위도 경도 가져옴
LatLng
currentLocation
=
new
LatLng
(
location
.
getLatitude
(),
location
.
getLongitude
());
LatLng
currentLocation
=
new
LatLng
(
location
.
getLatitude
(),
location
.
getLongitude
());
MarkerOptions
markerOptions
=
new
MarkerOptions
();
markerOptions
.
position
(
currentLocation
);
...
...
@@ -119,16 +121,18 @@ public class Map extends Fragment
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
View
layout
=
inflater
.
inflate
(
R
.
layout
.
map
,
container
,
false
);
mapView
=
(
MapView
)
layout
.
findViewById
(
R
.
id
.
mapView
);
mapView
=
(
MapView
)
layout
.
findViewById
(
R
.
id
.
mapView
);
mapView
.
getMapAsync
(
this
);
PlaceAutocompleteFragment
autocompleteFragment
=
(
PlaceAutocompleteFragment
)
getActivity
().
getFragmentManager
().
findFragmentById
(
R
.
id
.
place_autocomplete_fragment
);
autocompleteFragment
.
setOnPlaceSelectedListener
(
new
PlaceSelectionListener
()
{
PlaceAutocompleteFragment
autocompleteFragment
=
(
PlaceAutocompleteFragment
)
getActivity
().
getFragmentManager
().
findFragmentById
(
R
.
id
.
place_autocomplete_fragment
);
autocompleteFragment
.
setOnPlaceSelectedListener
(
new
PlaceSelectionListener
()
{
@Override
public
void
onPlaceSelected
(
Place
place
)
{
public
void
onPlaceSelected
(
Place
place
)
{
Location
location
=
new
Location
(
""
);
location
.
setLatitude
(
place
.
getLatLng
().
latitude
);
location
.
setLongitude
(
place
.
getLatLng
().
longitude
);
...
...
@@ -137,7 +141,8 @@ public class Map extends Fragment
}
@Override
public
void
onError
(
Status
status
)
{
public
void
onError
(
Status
status
)
{
Log
.
i
(
TAG
,
"An error occurred: "
+
status
);
}
});
...
...
@@ -158,8 +163,8 @@ public class Map extends Fragment
super
.
onStop
();
mapView
.
onStop
();
if
(
googleApiClient
!=
null
&&
googleApiClient
.
isConnected
())
googleApiClient
.
disconnect
();
if
(
googleApiClient
!=
null
&&
googleApiClient
.
isConnected
())
{
googleApiClient
.
disconnect
();
}
}
@Override
...
...
@@ -175,8 +180,8 @@ public class Map extends Fragment
super
.
onResume
();
mapView
.
onResume
();
if
(
googleApiClient
!=
null
)
googleApiClient
.
connect
();
if
(
googleApiClient
!=
null
)
{
googleApiClient
.
connect
();
}
}
@Override
...
...
@@ -185,10 +190,12 @@ public class Map extends Fragment
super
.
onPause
();
mapView
.
onPause
();
if
(
googleApiClient
!=
null
&&
googleApiClient
.
isConnected
())
{
LocationServices
.
FusedLocationApi
.
removeLocationUpdates
(
googleApiClient
,
(
com
.
google
.
android
.
gms
.
location
.
LocationListener
)
this
);
if
(
googleApiClient
!=
null
&&
googleApiClient
.
isConnected
())
{
LocationServices
.
FusedLocationApi
.
removeLocationUpdates
(
googleApiClient
,
this
);
googleApiClient
.
disconnect
();
}
}
@Override
...
...
@@ -204,12 +211,14 @@ public class Map extends Fragment
super
.
onDestroy
();
mapView
.
onLowMemory
();
if
(
googleApiClient
!=
null
)
{
if
(
googleApiClient
!=
null
)
{
googleApiClient
.
unregisterConnectionCallbacks
(
this
);
googleApiClient
.
unregisterConnectionFailedListener
(
this
);
if
(
googleApiClient
.
isConnected
())
{
LocationServices
.
FusedLocationApi
.
removeLocationUpdates
(
googleApiClient
,
(
com
.
google
.
android
.
gms
.
location
.
LocationListener
)
this
);
if
(
googleApiClient
.
isConnected
())
{
LocationServices
.
FusedLocationApi
.
removeLocationUpdates
(
googleApiClient
,
this
);
googleApiClient
.
disconnect
();
}
}
...
...
@@ -220,6 +229,7 @@ public class Map extends Fragment
{
super
.
onActivityCreated
(
savedInstanceState
);
Log
.
i
(
TAG
,
"An error occurred: onActivityCreated"
);
//액티비티가 처음 생성될 때 실행되는 함수
MapsInitializer
.
initialize
(
getActivity
().
getApplicationContext
());
...
...
@@ -227,24 +237,26 @@ public class Map extends Fragment
{
mapView
.
onCreate
(
savedInstanceState
);
}
Log
.
i
(
TAG
,
"An error occurred: EndonActivityCreated"
);
}
@Override
public
void
onMapReady
(
GoogleMap
googleMap
)
{
//
// LatLng SEOUL = new LatLng(37.56, 126.97);
// MarkerOptions markerOptions = new MarkerOptions();
// markerOptions.position(SEOUL);
// markerOptions.title("서울");
// markerOptions.snippet("수도");
// googleMap.addMarker(markerOptions);
// googleMap.moveCamera(CameraUpdateFactory.newLatLng(SEOUL));
// googleMap.animateCamera(CameraUpdateFactory.zoomTo(13));
//
// LatLng SEOUL = new LatLng(37.56, 126.97);
// MarkerOptions markerOptions = new MarkerOptions();
// markerOptions.position(SEOUL);
// markerOptions.title("서울");
// markerOptions.snippet("수도");
// googleMap.addMarker(markerOptions);
// googleMap.moveCamera(CameraUpdateFactory.newLatLng(SEOUL));
// googleMap.animateCamera(CameraUpdateFactory.zoomTo(13));
// OnMapReadyCallback implements 해야 mapView.getMapAsync(this); 사용가능. this 가 OnMapReadyCallback
Log
.
i
(
TAG
,
"An error occurred: onMapReady"
);
this
.
googleMap
=
googleMap
;
//런타임 퍼미션 요청 대화상자나 GPS 활성 요청 대화상자 보이기전에 지도의 초기위치를 서울로 이동
...
...
@@ -256,117 +268,82 @@ public class Map extends Fragment
googleMap
.
animateCamera
(
CameraUpdateFactory
.
zoomTo
(
15
));
// API 23 이상이면 런타임 퍼미션 처리 필요
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
// 사용권한체크
int
hasFineLocationPermission
=
ContextCompat
.
checkSelfPermission
(
getActivity
(),
android
.
Manifest
.
permission
.
ACCESS_FINE_LOCATION
);
if
(
hasFineLocationPermission
==
PackageManager
.
PERMISSION_DENIED
)
{
if
(
hasFineLocationPermission
==
PackageManager
.
PERMISSION_DENIED
)
{
//사용권한이 없을경우
//권한 재요청
ActivityCompat
.
requestPermissions
(
getActivity
(),
new
String
[]{
android
.
Manifest
.
permission
.
ACCESS_FINE_LOCATION
},
PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION
);
}
else
{
}
else
{
//사용권한이 있는경우
if
(
googleApiClient
==
null
)
{
if
(
googleApiClient
==
null
)
{
buildGoogleApiClient
();
}
if
(
ActivityCompat
.
checkSelfPermission
(
getActivity
(),
android
.
Manifest
.
permission
.
ACCESS_FINE_LOCATION
)
==
PackageManager
.
PERMISSION_GRANTED
)
if
(
ActivityCompat
.
checkSelfPermission
(
getActivity
(),
android
.
Manifest
.
permission
.
ACCESS_FINE_LOCATION
)
==
PackageManager
.
PERMISSION_GRANTED
)
{
googleMap
.
setMyLocationEnabled
(
true
);
}
}
}
else
{
}
else
{
if
(
googleApiClient
==
null
)
{
if
(
googleApiClient
==
null
)
{
buildGoogleApiClient
();
}
googleMap
.
setMyLocationEnabled
(
true
);
}
Log
.
i
(
TAG
,
"An error occurred: ENDonMapReady"
);
}
private
void
buildGoogleApiClient
()
{
googleApiClient
=
new
GoogleApiClient
.
Builder
(
getActivity
())
.
addConnectionCallbacks
(
this
)
.
addOnConnectionFailedListener
(
this
)
.
addApi
(
LocationServices
.
API
)
.
addApi
(
Places
.
GEO_DATA_API
)
.
addApi
(
Places
.
PLACE_DETECTION_API
)
.
enableAutoManage
(
getActivity
(),
this
)
.
build
();
Log
.
i
(
TAG
,
"An error occurred: buildGoogleApiClient"
);
googleApiClient
=
new
GoogleApiClient
.
Builder
(
getActivity
()).
addConnectionCallbacks
(
this
).
addOnConnectionFailedListener
(
this
).
addApi
(
LocationServices
.
API
).
addApi
(
Places
.
GEO_DATA_API
).
addApi
(
Places
.
PLACE_DETECTION_API
).
enableAutoManage
(
getActivity
(),
this
).
build
();
googleApiClient
.
connect
();
Log
.
i
(
TAG
,
"An error occurred: ENDbuildGoogleApiClient"
);
}
public
boolean
checkLocationServicesStatus
()
{
LocationManager
locationManager
=
(
LocationManager
)
getActivity
().
getSystemService
(
Context
.
LOCATION_SERVICE
);
return
locationManager
.
isProviderEnabled
(
LocationManager
.
GPS_PROVIDER
)
||
locationManager
.
isProviderEnabled
(
LocationManager
.
NETWORK_PROVIDER
);
}
@Override
public
void
onLocationChanged
(
Location
location
)
{
Log
.
i
(
TAG
,
"onLocationChanged call.."
);
searchCurrentPlaces
();
}
private
void
searchCurrentPlaces
()
public
boolean
checkLocationServicesStatus
()
{
Log
.
i
(
TAG
,
"An error occurred: checkLocationServicesStatus"
);
@SuppressWarnings
(
"MissingPermission"
)
PendingResult
<
PlaceLikelihoodBuffer
>
result
=
Places
.
PlaceDetectionApi
.
getCurrentPlace
(
googleApiClient
,
null
);
result
.
setResultCallback
(
new
ResultCallback
<
PlaceLikelihoodBuffer
>(){
@Override
public
void
onResult
(
@NonNull
PlaceLikelihoodBuffer
placeLikelihoods
)
{
int
i
=
0
;
LikelyPlaceNames
=
new
String
[
MAXENTRIES
];
LikelyAddresses
=
new
String
[
MAXENTRIES
];
LikelyAttributions
=
new
String
[
MAXENTRIES
];
LikelyLatLngs
=
new
LatLng
[
MAXENTRIES
];
for
(
PlaceLikelihood
placeLikelihood
:
placeLikelihoods
)
{
LikelyPlaceNames
[
i
]
=
(
String
)
placeLikelihood
.
getPlace
().
getName
();
LikelyAddresses
[
i
]
=
(
String
)
placeLikelihood
.
getPlace
().
getAddress
();
LikelyAttributions
[
i
]
=
(
String
)
placeLikelihood
.
getPlace
().
getAttributions
();
LikelyLatLngs
[
i
]
=
placeLikelihood
.
getPlace
().
getLatLng
();
i
++;
if
(
i
>
MAXENTRIES
-
1
)
{
break
;
}
}
placeLikelihoods
.
release
();
Location
location
=
new
Location
(
""
);
location
.
setLatitude
(
LikelyLatLngs
[
0
].
latitude
);
location
.
setLongitude
(
LikelyLatLngs
[
0
].
longitude
);
setCurrentLocation
(
location
,
LikelyPlaceNames
[
0
],
LikelyAddresses
[
0
]);
}
});
LocationManager
locationManager
=
(
LocationManager
)
getActivity
().
getSystemService
(
Context
.
LOCATION_SERVICE
);
Log
.
i
(
TAG
,
"An error occurred: ENDcheckLocationServicesStatus"
);
return
locationManager
.
isProviderEnabled
(
LocationManager
.
GPS_PROVIDER
)
||
locationManager
.
isProviderEnabled
(
LocationManager
.
NETWORK_PROVIDER
);
}
@Override
public
void
on
StatusChanged
(
String
provider
,
int
status
,
Bundle
extras
)
public
void
on
LocationChanged
(
Location
location
)
{
}
@Override
public
void
onProviderEnabled
(
String
provider
)
Log
.
i
(
TAG
,
"onLocationChanged call.."
);
lastLocation
=
location
;
if
(
currentMarker
!=
null
)
{
currentMarker
.
remove
();
}
LatLng
mlanglang
=
new
LatLng
(
location
.
getLatitude
(),
location
.
getLongitude
());
MarkerOptions
markerOptions
=
new
MarkerOptions
();
markerOptions
.
position
(
mlanglang
);
markerOptions
.
title
(
"Current Location"
);
markerOptions
.
icon
(
BitmapDescriptorFactory
.
defaultMarker
(
BitmapDescriptorFactory
.
HUE_RED
));
@Override
public
void
onProviderDisabled
(
String
provider
)
{
currentMarker
=
googleMap
.
addMarker
(
markerOptions
);
googleMap
.
moveCamera
(
CameraUpdateFactory
.
newLatLng
(
mlanglang
));
googleMap
.
animateCamera
(
CameraUpdateFactory
.
zoomBy
(
10
));
}
...
...
@@ -374,71 +351,79 @@ public class Map extends Fragment
public
void
onConnected
(
@Nullable
Bundle
bundle
)
{
if
(
!
checkLocationServicesStatus
())
{
Log
.
i
(
TAG
,
"An error occurred: onConnected"
);
if
(!
checkLocationServicesStatus
())
{
AlertDialog
.
Builder
builder
=
new
AlertDialog
.
Builder
(
getActivity
());
builder
.
setTitle
(
"위치 서비스 비활성화"
);
builder
.
setMessage
(
"앱을 사용하기 위해서는 위치 서비스가 필요합니다.\n"
+
"위치 설정을 수정하십시오."
);
builder
.
setMessage
(
"앱을 사용하기 위해서는 위치 서비스가 필요합니다.\n"
+
"위치 설정을 수정하십시오."
);
builder
.
setCancelable
(
true
);
builder
.
setPositiveButton
(
"설정"
,
new
DialogInterface
.
OnClickListener
()
{
builder
.
setPositiveButton
(
"설정"
,
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialogInterface
,
int
i
)
{
Intent
callGPSSettingIntent
=
new
Intent
(
Settings
.
ACTION_LOCATION_SOURCE_SETTINGS
);
public
void
onClick
(
DialogInterface
dialogInterface
,
int
i
)
{
Intent
callGPSSettingIntent
=
new
Intent
(
Settings
.
ACTION_LOCATION_SOURCE_SETTINGS
);
startActivityForResult
(
callGPSSettingIntent
,
GPS_ENABLE_REQUEST_CODE
);
}
});
builder
.
setNegativeButton
(
"취소"
,
new
DialogInterface
.
OnClickListener
(){
builder
.
setNegativeButton
(
"취소"
,
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialogInterface
,
int
i
)
{
public
void
onClick
(
DialogInterface
dialogInterface
,
int
i
)
{
dialogInterface
.
cancel
();
}
});
builder
.
create
().
show
();
}
Log
.
i
(
TAG
,
"An error occurred: onConnected2"
);
LocationRequest
locationRequest
=
new
LocationRequest
();
locationRequest
.
setPriority
(
LocationRequest
.
PRIORITY_HIGH_ACCURACY
);
locationRequest
.
setInterval
(
UPDATE_INTERVAL_MS
);
locationRequest
.
setFastestInterval
(
FASTEST_UPDATE_INTERVAL_MS
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(
ActivityCompat
.
checkSelfPermission
(
getActivity
(),
android
.
Manifest
.
permission
.
ACCESS_FINE_LOCATION
)
==
PackageManager
.
PERMISSION_GRANTED
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(
ActivityCompat
.
checkSelfPermission
(
getActivity
(),
android
.
Manifest
.
permission
.
ACCESS_FINE_LOCATION
)
==
PackageManager
.
PERMISSION_GRANTED
)
{
LocationServices
.
FusedLocationApi
.
requestLocationUpdates
(
googleApiClient
,
locationRequest
,
(
com
.
google
.
android
.
gms
.
location
.
LocationListener
)
this
);
LocationServices
.
FusedLocationApi
.
requestLocationUpdates
(
googleApiClient
,
locationRequest
,
this
);
}
}
else
{
LocationServices
.
FusedLocationApi
.
requestLocationUpdates
(
googleApiClient
,
locationRequest
,
(
com
.
google
.
android
.
gms
.
location
.
LocationListener
)
this
);
}
else
{
LocationServices
.
FusedLocationApi
.
requestLocationUpdates
(
googleApiClient
,
locationRequest
,
this
);
this
.
googleMap
.
getUiSettings
().
setCompassEnabled
(
true
);
this
.
googleMap
.
animateCamera
(
CameraUpdateFactory
.
zoomTo
(
15
));
}
Log
.
i
(
TAG
,
"An error occurred: onConnected3"
);
}
@Override
public
void
onConnectionSuspended
(
int
i
)
{
if
(
i
==
CAUSE_NETWORK_LOST
)
Log
.
e
(
TAG
,
"onConnectionSuspended(): Google Play services "
+
"connection lost. Cause: network lost."
);
else
if
(
i
==
CAUSE_SERVICE_DISCONNECTED
)
Log
.
e
(
TAG
,
"onConnectionSuspended(): Google Play services "
+
"connection lost. Cause: service disconnected"
);
if
(
i
==
CAUSE_NETWORK_LOST
)
{
Log
.
e
(
TAG
,
"onConnectionSuspended(): Google Play services "
+
"connection lost. Cause: network lost."
);
}
else
if
(
i
==
CAUSE_SERVICE_DISCONNECTED
)
{
Log
.
e
(
TAG
,
"onConnectionSuspended(): Google Play services "
+
"connection lost. Cause: service disconnected"
);
}
}
@Override
public
void
onConnectionFailed
(
@NonNull
ConnectionResult
connectionResult
)
{
Log
.
i
(
TAG
,
"An error occurred: onConnectionFailed"
);
Location
location
=
new
Location
(
""
);
location
.
setLatitude
(
DEFAULT_LOCATION
.
latitude
);
location
.
setLongitude
((
DEFAULT_LOCATION
.
longitude
));
setCurrentLocation
(
location
,
"위치정보 가져올 수 없음"
,
"위치 퍼미션과 GPS활성 여부 확인
"
);
setCurrentLocation
(
location
,
"위치정보 가져올 수 없음"
,
"위치 퍼미션과 GPS활성 여부 확인"
);
Log
.
i
(
TAG
,
"An error occurred: ENDonConnectionFailed
"
);
}
}
...
...
Please
register
or
login
to post a comment