У вас могут быть причины ниже?
Первая причина
Поставщик местоположения не дает вам 0.0 значений в виде широты и долготы. Вы получаете то, что вы определили в первый раз. Потому что вы не получили новое местоположение или getLastKnownLocation () возвращает null. Поэтому переменные широты и долготы сохраняют свои первые значения (0.0)
double latitude;
double longitude;
Вторая причина
Всякий раз, когда вы вызываете метод getLocation (), метод getLastKnownLocation () ничего не делает до тех пор, пока onLocationChanged fire ! (в зависимости от поставщика)
@Override
public void onLocationChanged(Location location) {
}
Разработано для «в зависимости от поставщика»
Вы запросили как gps, так и поставщиков сети.
requestLocationUpdates(LocationManager.NETWORK_PROVIDER ... mLocationListener);
requestLocationUpdates(LocationManager.GPS_PROVIDER ... mLocationListener);
И затем вызвал метод getLastKnownLocation для обоих поставщиков
locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Предположим, что эти два провайдера вернули значение null. В этом случае вам нужно подождать, пока не будет запущен метод onLocationChanged. В противном случае вы получите null из метода getLastKnownLocation в зависимости от поставщика
@Override
public void onLocationChanged(final Location location) {
String providerName = location.getProvider();
if(providerName.equals(LocationManager.GPS_PROVIDER)){
// onLocationChanged method is fired by gps provider.
// After this point, getLastKnownLocation(); method returns not-null
// for LocationManager.GPS_PROVIDER
}
if( providerName.equals(LocationManager.NETWORK_PROVIDER)){
// onLocationChanged method is fired by network provider.
// After this point, getLastKnownLocation(); method returns not-null
// for LocationManager.NETWORK_PROVIDER
}
}
Вам просто нужно привязать сертификат к ip: порту, а затем открыть слушатель с префиксом https: //. 0.0.0.0 применяется ко всем ip. appid - любой случайный GUID, а certhash - хэш сертификата (иногда называемый thumprint).
Выполните следующее с помощью cmd.exe, используя права администратора.
netsh http add sslcert ipport=0.0.0.0:1234 certhash=613bb67c4acaab06def391680505bae2ced4053b appid={86476d42-f4f3-48f5-9367-ff60f2ed2cdc}
Если вы хотите создать самозаверяющий сертификат для проверки этого,
HttpListener listener = new HttpListener();
listener.Prefixes.Add("https://+:1234/");
listener.Start();
Console.WriteLine("Listening...");
HttpListenerContext context = listener.GetContext();
using (Stream stream = context.Response.OutputStream)
using (StreamWriter writer = new StreamWriter(stream))
writer.Write("hello, https world");
Console.ReadLine();
После запуска этой программы я просто перешел к https://localhost:1234
, чтобы увидеть напечатанный текст. Поскольку сертификат CN не соответствует URL-адресу, и он не находится в хранилище доверенных сертификатов, вы получите предупреждение о сертификате. Однако текст зашифрован, как вы можете проверить с помощью инструмента, такого как Wire Shark.
Если вам нужен больше контроля над созданием самоподписанного сертификата x509, openssl - отличный инструмент, и есть порт для окон. У меня был намного больше успеха, чем инструмент makecert.
Также очень важно, чтобы, если вы общаетесь с https-сервисом из кода с предупреждением ssl, вы должны настроить валидатор сертификата в диспетчере точек обслуживания, чтобы обойти его для целей тестирования.
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, errors) => true;
имеет следующее примечание:
Если вы создаете HttpListener с помощью https, вы должны выбрать сертификат сервера для этого слушатель. В противном случае запрос HttpWebRequest этого HttpListener завершится с неожиданным закрытием соединения.
и это:
Вы можете настроить сертификаты сервера и другой прослушиватель с помощью HttpCfg.exe. Подробнее см. В http://msdn.microsoft.com/library/default.asp?url=/library/en-us/http/http/httpcfg_exe.asp . Исполняемый файл поставляется с Windows Server 2003 или может быть создан из исходного кода, доступного в Platform SDK.
Является ли первая заметка объясняемой второй? Как указано в вопросе, я использовал httpcfg.exe для привязки сертификата к определенному порту. Если они намереваются что-то другое, примечание неоднозначно.
Я столкнулся с той же проблемой, что и вы. К счастью, после того, как googling выполнил жесткие шаги на этой странице , SSL работает с моим HttpListener.
Ниже приведен альтернативный способ привязки SSL-сертификата к комбинации IP / PORT без использования httpcfg.exe
(XP) или netsh.exe
(Vista +).
http: // dotnetcodebox .blogspot.com.au / 2012/01 / how-to-work-with-ssl-certificate.html
Суть в том, что вы можете использовать C ++ HttpSetServiceConfiguration API встроен в окна, чтобы сделать это программно, а не через командную строку, следовательно, удалить зависимость от ОС и установить httpcfg.