Страница 8 из 9
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 27 апр 2015, 13:50
Mikhail_dev
Только делать запрос в интернет с указанием необходимых координат. Вот тема
http://stackoverflow.com/questions/1995 ... d-latitude
ну или использовать Google Play Services для определения местоположения, и там есть возможность узнать высоту над уровнем моря, так сказать с коробки
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 27 апр 2015, 14:54
Genka_Volkov
POST запросом?
да
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 27 апр 2015, 14:57
Mikhail_dev
Ну вот и действуйте! =)
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 27 апр 2015, 15:01
Genka_Volkov
Mikhail_dev писал(а):Ну вот и действуйте! =)
в этом то вся проблема, что я не знаю как начать даже
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 27 апр 2015, 15:03
Genka_Volkov
Mikhail_dev писал(а):Ну вот и действуйте! =)
дело в том, что я только по урокам пока могу разбираться. может где то есть какие нибудь примеры?
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 02 май 2015, 18:01
trubasyava
Mikhail_dev писал(а):Только делать запрос в интернет с указанием необходимых координат. Вот тема
http://stackoverflow.com/questions/1995 ... d-latitude
ну или использовать Google Play Services для определения местоположения, и там есть возможность узнать высоту над уровнем моря, так сказать с коробки
спасибо, попробовав это я узнал, что это устаревший код, который уже не компилится в андроид студио, посмотрел как по-новому будет, в общем вот, что написал, но приложение крашится, first - метод-обработчик нажатия на кнопку, нажимая на кнопку, приложение сразу выкидывает ошибку и закрывается, я вообще не понимаю в чём проблема, даже ворнингов нет
В МАНИФЕСТЕ прописал всё, что надо
Код: Выделить всё
public class MainActivity extends ActionBarActivity {
//String result = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void first(View view)
{
String stringUrl = "http://maps.googleapis.com/maps/api/elevation/xml?locations=47.237222,39.712222&sensor=true";
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new DownloadTask().execute(stringUrl);
} else {
Toast.makeText(this,"НЕТ СЕТИ ИЛИ типатого",Toast.LENGTH_SHORT).show();
}
}
private class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
try {
String str = downloadUrl(urls[0]);
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
return str;
} catch (IOException e) {
Toast.makeText(MainActivity.this,"НЕВОЗМОЖНО ПОДКЛ К URL",Toast.LENGTH_SHORT).show();
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
private String downloadUrl(String myurl) throws IOException {
InputStream is = null;
// Only display the first 500 characters of the retrieved
// web page content.
BufferedReader reader = null;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
int response = conn.getResponseCode();
Toast.makeText(MainActivity.this,"The response is: " + response,Toast.LENGTH_SHORT).show();
is = conn.getInputStream();
// Convert the InputStream into a string
String contentAsString;
reader = new BufferedReader(new InputStreamReader(is));
contentAsString=reader.readLine();//просто прочитал, чтоб хоть что-то было
return contentAsString;
// Makes sure that the InputStream is closed after the app is
// finished using it.
}
finally {
if (is != null) {
is.close();
}
if (reader != null) {
reader.close();
}
}
}
}
}
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 02 май 2015, 18:12
doter.ua
Используй code для вставки кода на форум.
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 02 май 2015, 22:41
trubasyava
trubasyava писал(а):Mikhail_dev писал(а):Только делать запрос в интернет с указанием необходимых координат. Вот тема
http://stackoverflow.com/questions/1995 ... d-latitude
ну или использовать Google Play Services для определения местоположения, и там есть возможность узнать высоту над уровнем моря, так сказать с коробки
спасибо, попробовав это я узнал, что это устаревший код, который уже не компилится в андроид студио, посмотрел как по-новому будет, в общем вот, что написал, но приложение крашится, first - метод-обработчик нажатия на кнопку, нажимая на кнопку, приложение сразу выкидывает ошибку и закрывается, я вообще не понимаю в чём проблема, даже ворнингов нет
В МАНИФЕСТЕ прописал всё, что надо
Код: Выделить всё
public class MainActivity extends ActionBarActivity {
//String result = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void first(View view)
{
String stringUrl = "http://maps.googleapis.com/maps/api/elevation/xml?locations=47.237222,39.712222&sensor=true";
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new DownloadTask().execute(stringUrl);
} else {
Toast.makeText(this,"НЕТ СЕТИ ИЛИ типатого",Toast.LENGTH_SHORT).show();
}
}
private class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
try {
String str = downloadUrl(urls[0]);
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
return str;
} catch (IOException e) {
Toast.makeText(MainActivity.this,"НЕВОЗМОЖНО ПОДКЛ К URL",Toast.LENGTH_SHORT).show();
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
private String downloadUrl(String myurl) throws IOException {
InputStream is = null;
// Only display the first 500 characters of the retrieved
// web page content.
BufferedReader reader = null;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
int response = conn.getResponseCode();
Toast.makeText(MainActivity.this,"The response is: " + response,Toast.LENGTH_SHORT).show();
is = conn.getInputStream();
// Convert the InputStream into a string
String contentAsString;
reader = new BufferedReader(new InputStreamReader(is));
contentAsString=reader.readLine();//просто прочитал, чтоб хоть что-то было
return contentAsString;
// Makes sure that the InputStream is closed after the app is
// finished using it.
}
finally {
if (is != null) {
is.close();
}
if (reader != null) {
reader.close();
}
}
}
}
}
в общем сделал рабочий вариант, делается запрос по координатам географическим и показывается инфа
может кому пригодится код
Код: Выделить всё
public class MainActivity extends ActionBarActivity {
//String result = null;
TextView tv=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button but_first=(Button)findViewById(R.id.button1);
tv=(TextView)findViewById(R.id.textView);
but_first.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String stringUrl = "http://maps.googleapis.com/maps/api/elevation/xml?locations=47.237222,39.712222&sensor=true";
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
AsTask_Get ag=new AsTask_Get();
ag.execute(stringUrl);
} else {
Toast.makeText(MainActivity.this, "НЕТ СЕТИ ИЛИ ХЗ КРЧ", Toast.LENGTH_SHORT).show();
}
}
});
}
public class AsTask_Get extends AsyncTask<String, Void, String> {
String messsage="[пустая строка]";
@Override
protected String doInBackground(String... params) {
StringBuilder contentAsString = new StringBuilder();
InputStream is = null;
// Only display the first 500 characters of the retrieved
// web page content.
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000 );
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
//int response = conn.getResponseCode();
is = conn.getInputStream();
// Convert the InputStream into a string
reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
contentAsString.append(line);
}
}
catch (MalformedURLException e)
{
messsage= "ОШИБКА 111";
}
catch(IOException e)
{
messsage="ОШИБКА 222";
}
finally {
try {
if (is != null) {
is.close();
}
if (reader != null) {
reader.close();
}
}
catch(IOException e)
{
messsage="ОШИБКА 333";
}
}
return contentAsString.toString();
}
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result!=null)
tv.setText(result);
else
tv.setText(messsage);
}
}
}
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 13 май 2015, 11:20
Genka_Volkov
Здравствуйте еще раз! у меня следующая проблема. Все пытаюсь передать координаты на сервер.
Код: Выделить всё
public void send()
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://location.aiq.ru/index2.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("???", "???"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
}
catch (ClientProtocolException ignored) {
}catch (IOException ignored) {
}
У меня следующие вопросы.
1. Подскажите пожалуйста, какие строки я должен передать, вместо "???" ?
2. отправятся ли данные вообще?
3. нужно ли на сервере в php прописывать код обработки?
Заранее спасибо!
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 06 авг 2015, 15:58
Ssnake707
Подскажите почему программа не запускается?
есть код
Код: Выделить всё
public void onResume() {
super.onResume();
// работа с сенсором
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_LIGHT), sm.SENSOR_DELAY_UI);
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_PRESSURE), sm.SENSOR_DELAY_UI);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,100*10,10,ll);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000*10, 10,ll);
checkEnabled();
}
если убрать
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,100*10,10,ll);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000*10, 10,ll);
то программа запускается.
Листинг ll
Код: Выделить всё
LocationListener ll = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
showLocation(location);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
if (s.equals(LocationManager.GPS_PROVIDER)){
stat.setText(String.valueOf(i));
}else if (s.equals(LocationManager.NETWORK_PROVIDER)){
stat2.setText(String.valueOf(i));
}
}
@Override
public void onProviderEnabled(String s) {
showLocation(lm.getLastKnownLocation(s));
}
@Override
public void onProviderDisabled(String s) {
checkEnabled();
}
};
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 02 сен 2015, 20:17
mercuriy94
Здравствуйте) хотелось бы поинтересоваться, после того как получил координаты, каким образом я могу получить свой точный адрес ? нашёл в хелпе
http://developer.android.com/intl/ru/tr ... dress.html . но увы с английским траблы, может кто занимался данным вопросом и чем может поможет)
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 03 сен 2015, 00:03
Mikhail_dev
Есть такая вещь как геокодеры, которые преобразуют координаты в адрес и наоборот (прямой и обратный геокодинг). Вообще эта штука у гугла вроде как под лицензией идёт, и там стоят ограничения в коммерческой разработке, точнее на количество запросов в сутки (25 тысяч вроде).
Но то другой геокодер, а по той ссылке что вы дали, там есть такой
http://developer.android.com/intl/ru/re ... coder.html
Я его не пробовал. Поищите примеры по его использованию.
И вообще можете погуглить что за чудо такие геокодеры и как с ними в андроиде работать. Знаю еще один геокодер: Nominatim
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 16 ноя 2015, 20:03
danek130995
1)В методе onSensorChanged приложения Acceleration мы "вычислительным фильтром" получаем из датчика ускорения чистую гравитацию и чистое ускорение:
Код: Выделить всё
valuesAccelGravity[i] = (float) (0.1 * event.values[i] + 0.9 * valuesAccelGravity[i]);
valuesAccelMotion[i] = event.values[i]
- valuesAccelGravity[i];
Как получаем чистое ускорение - это понятно-просто вычитаем гравитацию. А вот почему именно таким способом получаем гравитацию-не пойму. Почему на 0.1 умножаем, почему на 0.9 умножаем valuesAccelGravity, ведь мы именно ему присваиваем значение, у нас вроде нет еще значения на предыдущем шаге?
2) У меня в третьем приложении (Orientation) почему то данные совпадают для Orientation и Orientation2(с учетом поворота экрана и без). Не знаете, почему?
3)Непонятно, как работает определение угла по оси Y. По оси X-понятно, отклонение от горизонтального положения(экраном вверх). Ось Z-тоже понятно, отклонение от севера. А вот ось Y-когда я вращаю экраном вправо-влево(как будто перелистываю страницу)-значения меняются, но если устройство расположить в вертикальном положении и начать крутится по кругу, то они приобретают странный смысл-меняются, а потом иногда возвращаются обратно.
4)Почему мы в getActualDeviceOrientation() в
Код: Выделить всё
case (Surface.ROTATION_180):
y_axis = SensorManager.AXIS_MINUS_Y;
меняем только ось Y на отрицательную при повороте устройства вверх ногами? Ось X то тоже меняться должна! У нее тоже изменится направление на противоположное!
Прошу ответить тех, кто знает. Спасибо заранее!
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 26 ноя 2015, 06:59
tran trung
Помогите пожалуйста Mikhail_dev. Например: через 10с мы получим ноыве координаты. Через 1минуту, получим 6 новых координат. Вопрос: Как сохраниьт 6 новых координат (и больше значении) в файле и потом можно работать в Word? Спасибо большое!
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 26 ноя 2015, 10:01
Mikhail_dev
Мы сохраняем в базу SQLite.
P.S. причем тут ворд?
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 27 ноя 2015, 04:08
tran trung
Спасибо уважаемему Mikhail_dev, а как полученные координаты автоматически сохраняют в базу SQLite не надо никакой кпопки нажать? (на уроке 34 должен нажать кпопку Add чтобы сохранить и кпопку Read чтобы читать). Я хочу корпировать такие заначения из файла базы SQLite (data/data/ru.startandroid.develop.../databases/myDB), вставить в Word и в нем работаю. Зарание спасибо!
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 17 янв 2016, 16:21
kunstkamera
Здравствуйте!
Я пишу приложение с сервисом, в котором (в сервисе) определяются текущее местоположение с помощью locationListener.
Код: Выделить всё
Criteria c = new Criteria();
c.setAccuracy(Criteria.ACCURACY_FINE);
final String PROVIDER = locationManager.getBestProvider(c, true);
locationManager.requestLocationUpdates(PROVIDER, 60*1000, 0, locationListener);
Появилась проблема.
Код с locationListener-ом в активити или в фрагменте замечательно определяет координаты, принимает location и т.д. Но этот-же код в службе может не принимать координаты часами, потом, принять 60 новых location за 60 секунд и снова заснуть на 10 минут.
Сервис объявил как Foreground, добавил
Код: Выделить всё
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DoNotSleep");
Жду советов\ исправлений.
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 04 фев 2016, 09:58
Батька Андройд
Здравствуйте. Один маленький вопрос, код полностью абсолютно такой же как в уроке, но у меня network_provider включается только тогда, когда включишь и gps на телефоне. Если GPS выключен, то network ни в какую не работает, ни с обычным инетом, ни с wi-fi. В коде разобрался, не пойму почему.
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 27 дек 2016, 12:46
garic
Добрый день.
Полностью повторил урок. GPS работает нормально, данные приходят и обновляются. Но по сети данных нет, пробовал и через wifi и через мобильный интернет, их нет. Может быть сейчас появились другие способы получения координат через сеть? Тестирую на устройстве с 6 андроидом.
Re: Урок 138. Определение местоположения. GPS координаты.
Добавлено: 29 июл 2017, 13:35
SiberianHusky
Здравствуйте! Я новичок в Android, пытаюсь писать приложение для бега и рассчета дистанции,
столкнулся с тем, что скачут gps координаты, дистанцию пробовал считать с помощью distanceTo по точкам, получается сидишь на месте, локация меняется и дистанция соответственно.
Mikhail_dev писал(а):
Варианты решения проблемы с неправильными точками GPS:
1. Самый простой: 4 спутника и более (причем данные брать с протокола NMEA), при этом "Индикатор качества GPS сигнала" должен быть>0, при этом качество GPS координат лучше 250
Попробовал по советам в StackOverflow использовать анонимный класс OnNmeaMessageListener(), чтобы получить хотя бы
строку $GPGGA, а потом уже разбираться с ней, android studio предлагает его обернуть в if
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N),
Код: Выделить всё
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locationManager.addNmeaListener(new OnNmeaMessageListener() {
@Override
public void onNmeaMessage(String message, long timestamp) {
String lowerNmea = message.toLowerCase(Locale.ENGLISH);
if(message.startsWith("$GPGGA"))
{
if(lowerNmea.indexOf(",e,")>0 || lowerNmea.indexOf(",w,")>0)
// тут textView не для этого предназначалось, поэтому название не соответствует, пока
// пытаюсь вывести строку
// и посмотреть как эта строка выглядит
tvTemp.setText(message.trim());
}
else
{
tvTemp.setText("not");
}
}
});
}
else
{
Toast.makeText(this, "app version isn't high", Toast.LENGTH_SHORT).show();
}
также я обработал else и выходит, что на моем устройстве (тестирую на своем телефоне android 5.1) не поддерживается
получение nmea данных или нужен другой слушатель, чтобы получить эту строку, распарсить ее, получить количество спутников и индикатор качества gps сигнала?
провайдер- gps, разрешение в манифесте есть
Код: Выделить всё
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Пожалуйста, помогите!