Форум программистов, компьютерный форум CyberForum.ru

Вылетает приложение с определением местоположения - Android

Восстановить пароль Регистрация
 
Novichek_9I
4 / 5 / 2
Регистрация: 31.03.2015
Сообщений: 135
20.04.2015, 22:14     Вылетает приложение с определением местоположения #1
Здравствуйте!
Есть простенькое приложение для определения местоположения. При запуске оно выдает ошибку. Не могу понять в чем дело. Кто может помочь? (Тестирую на Android 4.4.2)

Вот код активности:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import android.app.Activity;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    private LocationManager mLocationManager;
    private LocationListener mLocationListener;
    private Location mLocation;
    private TextView mLatitudeTextView, mLongitudeTextView;
 
    private static final long MINIMUM_DISTANCE_FOR_UPDATES = 10; // в метрах
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 2000; // в мс
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.activity_main);
 
        mLatitudeTextView = (TextView) findViewById(R.id.textViewLatitude);
        mLongitudeTextView = (TextView) findViewById(R.id.textViewLongitude);
 
        mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        String provider = mLocationManager.getBestProvider(criteria, true);
        mLocation = mLocationManager.getLastKnownLocation(provider);
        mLocationListener = new MyLocationListener();
 
        showCurrentLocation(mLocation);
 
        // Регистрируемся для обновлений
        mLocationManager.requestLocationUpdates(provider,
                MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_FOR_UPDATES,
                mLocationListener);
    }
 
    @Override
    public void onPause() {
        super.onPause();
        mLocationManager.removeUpdates(mLocationListener);
    }
 
    public void onClick(View v) {
        showCurrentLocation(mLocation);
    }
 
    protected void showCurrentLocation(Location location) {
        if (location != null) {
            mLatitudeTextView.setText(String.valueOf(location.getLatitude()));
            mLongitudeTextView.setText(String.valueOf(location.getLongitude()));
        }
    }
 
    // Прослушиваем изменения
    private class MyLocationListener implements LocationListener {
 
        public void onLocationChanged(Location location) {
            String message = "Новое местоположение Долгота: " +
            location.getLongitude() + "Широта: " + location.getLatitude();
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG)
                    .show();
            showCurrentLocation(mLocation);
        }
 
        public void onStatusChanged(String s, int i, Bundle b) {
            Toast.makeText(MainActivity.this, "Статус провайдера изменился",
                    Toast.LENGTH_LONG).show();
        }
 
        public void onProviderDisabled(String s) {
            Toast.makeText(MainActivity.this,
                    "Провайдер заблокирован пользователем. GPS выключен",
                    Toast.LENGTH_LONG).show();
        }
 
        public void onProviderEnabled(String s) {
            Toast.makeText(MainActivity.this,
                    "Провайдер включен пользователем. GPS включён",
                    Toast.LENGTH_LONG).show();
        }
    }
}
В манифесте прописал
XML
1
2
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
На всякий случай код разметки:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <Button
        android:id="@+id/buttonUpdate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="Обновить данные" />
 
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Широта (Latitude): " />
 
    <TextView
        android:id="@+id/textViewLatitude"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Долгота (Longitude): " />
 
    <TextView
        android:id="@+id/textViewLongitude"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
</LinearLayout>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
21.04.2015, 08:59     Вылетает приложение с определением местоположения #2
Novichek_9I,
Цитата Сообщение от Novichek_9I Посмотреть сообщение
При запуске оно выдает ошибку
вполне логичный вопрос - какую???
Novichek_9I
4 / 5 / 2
Регистрация: 31.03.2015
Сообщений: 135
21.04.2015, 09:32  [ТС]     Вылетает приложение с определением местоположения #3
На планшете всплывает окошко, где написано, что в приложении ошибка Я не понимаю, где в логе Android Studio описание ошибки. Если подскажете, буду признателен
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
21.04.2015, 09:35     Вылетает приложение с определением местоположения #4
Novichek_9I,
Цитата Сообщение от Novichek_9I Посмотреть сообщение
Я не понимаю, где в логе Android Studio описание ошибки. Если подскажете, буду признателен
пользуюсь эклипсом, но рискну предположить что в AS тоже есть LogCat
Novichek_9I
4 / 5 / 2
Регистрация: 31.03.2015
Сообщений: 135
21.04.2015, 09:59  [ТС]     Вылетает приложение с определением местоположения #5
вот например Caused by из лога : Caused by: java.lang.IllegalArgumentException: invalid provider: null

Могу, конечно, весь лог скинуть... Если это поможет
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.04.2015, 10:21     Вылетает приложение с определением местоположения #6
Эмулятор?

Добавлено через 1 минуту
допишите проверку,
Java
1
2
3
if (provider == null) {
provider = LocationManager.GPS_PROVIDER;
}
Novichek_9I
4 / 5 / 2
Регистрация: 31.03.2015
Сообщений: 135
21.04.2015, 10:36  [ТС]     Вылетает приложение с определением местоположения #7
Цитата Сообщение от YuraAAA Посмотреть сообщение
Эмулятор?
Нет, тестирую на планшете (Android 4.4.2.)

Цитата Сообщение от YuraAAA Посмотреть сообщение
1
2
3
if (provider == null) {
provider = LocationManager.GPS_PROVIDER;
}
А где конкретно нужно вставить проверку ?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.04.2015, 10:55     Вылетает приложение с определением местоположения #8
Novichek_9I, после того как присваиваете переменной результат getBestProvider. Кстати, у вас
Цитата Сообщение от Novichek_9I Посмотреть сообщение
getBestProvider(criteria, true);
второй аргумент указывает, что будет выбран только из включённых провайдеров. Они у Вас включены (GPS/A-GPS)?
Novichek_9I
4 / 5 / 2
Регистрация: 31.03.2015
Сообщений: 135
21.04.2015, 11:31  [ТС]     Вылетает приложение с определением местоположения #9
YuraAAA, проверка не помогла. Да, провайдеры включены. Второй аргумент поменял на false, не помогло. Кстати, на планшете приложения GoogleMap, 2ГИС и другие сразу определяют мой город.

Может быть есть ссылки на другие примеры, где определяется местоположение, и лучше сразу - определяется город пользователя?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.04.2015, 11:37     Вылетает приложение с определением местоположения #10
Novichek_9I, покажите код с проверкой.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2015, 15:03     Вылетает приложение с определением местоположения
Еще ссылки по теме:

Вылетает приложение Android
Android Вылетает приложение
Android Вылетает приложение при запуске
Приложение вылетает с непонятной ошибкой Android
Из-за какой-то ошибки вылетает приложение Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Novichek_9I
4 / 5 / 2
Регистрация: 31.03.2015
Сообщений: 135
21.04.2015, 15:03  [ТС]     Вылетает приложение с определением местоположения #11
В манифесте переместил разрешения и приложение запустилось Но координаты не хочет показывать.

Добавил в код следующее
Java
1
2
3
4
if (location == null) {
            mLatitudeTextView.setText("Не работает");
            mLongitudeTextView.setText("Не работает");
        }
И приложение мне именно эти 2 текста и выдало.

Почему же location передается null ?

Добавлено через 3 часа 13 минут
Перезагрузил планшет, и заработало
Yandex
Объявления
21.04.2015, 15:03     Вылетает приложение с определением местоположения
Ответ Создать тему
Опции темы

Текущее время: 12:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru