Я попытался получить текущее местоположение в Android. По крайней мере, я взял этот пример из этой публикации.получить текущее местоположение в Android
How do I get the current GPS location programmatically in Android?
Хотя этот пост пять лет, CommonsWare сказал мне, чтобы задать новый вопрос. Вот мой фрагмент кода.
@Override
public void onCreate(Bundle arg0) {
super.onCreate(arg0);
Log.i(TAG, "onCreate");
setHasOptionsMenu(true);
mActivity = (CustomerTabs) this.getActivity();
mActivity.getActionBar().hide();
if (checkGooglePlayServicesAvailable()){
enableTabs(false);
showDialog(true, null);
requestPosition();
}
boolean checkGooglePlayServicesAvailable() {
final int connectionStatusCode = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(getActivity());
Log.i(TAG,
"checkGooglePlayServicesAvailable, connectionStatusCode="
+ connectionStatusCode);
if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
//showDialog(false,null);
showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
return false;
}
return true;
}
void showGooglePlayServicesAvailabilityErrorDialog(
final int connectionStatusCode) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
try {
final Dialog dialog = GooglePlayServicesUtil.getErrorDialog(
connectionStatusCode, getActivity(),
101);
if (dialog == null) {
Log.e(TAG,
"couldn't get GooglePlayServicesUtil.getErrorDialog");
}
}catch (Exception e){
e.printStackTrace();
}
}
});
}
void requestPosition(){
Log.i(TAG,"requestPosition");
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
try {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
60000, 1000,
onLocationChange);
}catch (Exception e){
e.printStackTrace();
showDialog(false, null);
enableTabs(true);
displayMessage(getString(R.string.position_fail));
}
}
LocationListener onLocationChange=new LocationListener() {
@Override
public void onLocationChanged(android.location.Location location) {
Log.i(TAG, "onLocationChange " + location.getLatitude() + "/" + location.getLongitude());
TemporaryPersister.getInstance().setCurrentPosition(new LatLng(location.getLatitude(),location.getLongitude()));
requestLocations();
}
разрешения на манифеста:
<permission
android:name="versatec.organightandroid.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="versatec.organightandroid.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES "/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
EDIT:
Это решение работает на 4.1 (S3 мини) с и без Wi-Fi, но не работает на другом устройстве (S3: без SIM - проблема?) В WiFi. Появляется диалоговое окно, запрашивается запросPosition(), и замечание происходит ...
У меня получена обратная связь от тестера, что он не работает (ничего не происходит) на 4.2 - S4, доступной сети.
Log:
I/Google Maps Android API﹕ Google Play services package version: 6599036
I/Map﹕ onCreate
I/Map﹕ checkGooglePlayServicesAvailable, connectionStatusCode=0
I/Map﹕ showDialog true
I/Map﹕ requestPosition
I/Map﹕ onCreateView
I/Map﹕ onActivityCreated
Пожалуйста, объясните ** полностью и точно **, что означает «не на 4.2.2». Например, сбой вашего приложения? Если да, то какова трассировка стека Java, связанная с сбоем? Является ли устройство 4.2.2 планшетом WiFi? – CommonsWare
ОК. См. Мое редактирование. – Bobbelinio
Могут ли пользователи отключить настройку местоположения? Это происходит последовательно или только несколько раз? –