Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
LocationSensor-Konum bilgisinin kaynağını bulmak
#1
Merhaba.
Halen delphi programını çözebilmek için denemeler yapıyorum.
Locationsensor kullandığımda konum bilgileri otomatik algılanıyor. Mobil interneti açıyorum gsm den alıyor, adsl ye bağlanıyorum ordan alıyor, GPS açıkken ordan da alıyor.
Ama doğrulukları aynı değil. 
En doğru bilgi GPS den geliyor. Sonra da sabit ADSL modem en doğru bilgiyi gösteriyor. En farklı bilgilerde mobil internetten geliyor. (Konumu değil, baz istasyonlarını gösteriyor)

Ben bir filitre yapmak istiyorum. Gelen konumları zamanlarına göre sorgulayarak, uzaklık hesaplarıyla doğruya en yakını bulmak istiyorum. Konum değiştiğinde, bunun GPS mi, mobil internet mi, adsl mi olduğunu nasıl anlayabilirim.

LocationSensor1.sensor.sensortype diye bir şey var. Ama nasıl kullanılacağını anlamadım.

Bu konudaki bilgilerinizi paylaşırsanız sevinirim....
Cevapla
#2
Merhaba,

İnternet bağlantınızı, Wi-Fi ve Celular Data kontrollerini şu metodlarla dener misiniz?

IsConnected - Bağlantının kontrolü için kullanılır.
IsMobileConnected - Mobil veri (Celular) bağlantısı için kullanılır.
IsWiFiConnected - Wi-Fi bağlantısı için kullanılır.


unit Androidapi.JNI.Network;

interface

function IsConnected: Boolean;
function IsWiFiConnected: Boolean;
function IsMobileConnected: Boolean;

implementation

uses
 System.SysUtils,
 Androidapi.JNIBridge,
 Androidapi.JNI.GraphicsContentViewText,
 Androidapi.JNI.JavaTypes,
 Androidapi.JNI.Net,
 FMX.Helpers.Android,
 Androidapi.Helpers;

// type
// JConnectivityManager = interface;
// JNetworkInfo = interface;
//
// JNetworkInfoClass = interface(JObjectClass)
// ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}']
// end;
//
// [JavaSignature('android/net/NetworkInfo')]
// JNetworkInfo = interface(JObject)
// ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}']
// { Methods }
// function isAvailable: Boolean; cdecl;
// function IsConnected: Boolean; cdecl;
// function isConnectedOrConnecting: Boolean; cdecl;
// end;
// TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>)
// end;
//
// JConnectivityManagerClass = interface(JObjectClass)
// ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}']
// { Property methods }
// function _GetTYPE_WIFI: Integer; cdecl;
// function _GetTYPE_WIMAX: Integer; cdecl;
// function _GetTYPE_MOBILE: Integer; cdecl;
// { Properties }
// property TYPE_WIFI: Integer read _GetTYPE_WIFI;
// property TYPE_WIMAX: Integer read _GetTYPE_WIMAX;
// property TYPE_MOBILE: Integer read _GetTYPE_MOBILE;
// end;
//
// [JavaSignature('android/net/ConnectivityManager')]
// JConnectivityManager = interface(JObject)
// ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}']
// { Methods }
// function getActiveNetworkInfo: JNetworkInfo; cdecl;
// function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl;
// end;
// TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass, JConnectivityManager>)
// end;

function GetConnectivityManager: JConnectivityManager;
var
 ConnectivityServiceNative: JObject;
begin
 ConnectivityServiceNative := TAndroidHelper.Context.getSystemService
   (TJContext.JavaClass.CONNECTIVITY_SERVICE);
 if not Assigned(ConnectivityServiceNative) then
   raise Exception.Create('Could not locate Connectivity Service');
 Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);
 if not Assigned(Result) then
   raise Exception.Create('Could not access Connectivity Manager');
end;

function IsConnected: Boolean;
var
 ConnectivityManager: JConnectivityManager;
 ActiveNetwork: JNetworkInfo;
begin
 ConnectivityManager := GetConnectivityManager;
 ActiveNetwork := ConnectivityManager.getActiveNetworkInfo;
 Result := Assigned(ActiveNetwork) and ActiveNetwork.IsConnected;
end;

function IsWiFiConnected: Boolean;
var
 ConnectivityManager: JConnectivityManager;
 WiFiNetwork: JNetworkInfo;
begin
 ConnectivityManager := GetConnectivityManager;
 WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI);
 Result := WiFiNetwork.IsConnected;
end;

function IsMobileConnected: Boolean;
var
 ConnectivityManager: JConnectivityManager;
 MobileNetwork: JNetworkInfo;
begin
 ConnectivityManager := GetConnectivityManager;
 MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE);
 Result := MobileNetwork.IsConnected;
end;

end.
{ talk is cheap show me the code. }
Cevapla
#3
Buradaki sıkıntım şu. GPS açık olduğu halde, bağlantı olmayınca Wifi den ya da mobil internetten de konum gelebilir.
Diğer uygulamalarda tek satır kod ile öğrenebildiğimiz basit bir sorgulamayı maalesef Delphi de yapamadım.
Tek istediğim LocationSensor un OnLocationChange eventine gelen konum bilgisinin kaynağını öğrenmek. GPS mi, WİFİ mi, MOBİL mi ?
Teşekkürler...
Cevapla
#4
(19-10-2017, Saat: 13:52)nehirnnn Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol...

LocationSensor1.sensor.sensortype diye bir şey var. Ama nasıl kullanılacağını anlamadım.

...

Merhaba,
Cevabınız sorunuzun için de saklı.
TCustomLocationSensor sınıfına ait Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol  enum tipi ile sensör veri kaynağını öğrenebilirsiniz.

Kodlama konusunda ise kısaca bir yol göstereyim.
TCustomSensor tipinde bir değişken oluşturun.
TSensorManager'ı aktifleştirin.
Oluşturduğunuz Sensör değişkeni,  TSensorManager'ın Current sensör özelliği ile TSensorCategory.Location tipinde set edin.
Daha sonra TLocationSensorType'ini aşağıdaki gibi kullanın.

if TCustomLocationSensor(SensorDeğişkeniniz).SensorType = TLocationSensorType.GPS then
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
(19-10-2017, Saat: 15:36)nehirnnn Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBuradaki sıkıntım şu. GPS açık olduğu halde, bağlantı olmayınca Wifi den ya da mobil internetten de konum gelebilir.
Diğer uygulamalarda tek satır kod ile öğrenebildiğimiz basit bir sorgulamayı maalesef Delphi de yapamadım.
Tek istediğim LocationSensor un OnLocationChange eventine gelen konum bilgisinin kaynağını öğrenmek. GPS mi, WİFİ mi, MOBİL mi ?
Teşekkürler...

Tek satır kod ile öğrendiğiniz kodlardan örneklem yapabilirseniz ihtiyacı daha doğru tespit ederek, hangi sınıf ve metodları irdelememiz gerektiğini inceleyebiliriz. FireMonkey cross-platform bir framework olduğu için Native Android kütüphanelerine erişmek adına JNI köprü sınıflarını kullanıyor. Bu bağlamda, tek satırlık çözümünüzde geçen yöntemlerin olduğu sınıfları bilirsek, FireMonkey ile de deneyebiliriz.
{ talk is cheap show me the code. }
Cevapla
#6
Yardımlarınız için teşekkürler. Bilgisayar başına geçer geçmez deniycem.
Cevapla
#7
Merhaba Arkadaşlar,

Location Sensor ile gps olmayan cihazlarda konumu wifi veya mobil bağlantı ile nasıl alabiliyorsunuz ? Location Sensor ile bu mümkün mü ?

Deneme yaptım gps olmayan cihazda veya gps kapalı iken herhangi bir veri alamıyorum.

teşekkürler
Cevapla
#8
Location Sensor sadece Gps açıkken çalışıyor. Başka bir yöntem olabilir. Çünkü diğer araçlarla programlama yaparken wifi ve mobil şebeke konumuna ulaşabiliyordum. Location Sensor de ben de bulamadım.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Location Sensor - Konum Bilgisi Öğrenme samet 3 221 09-11-2017, Saat: 10:51
Son Yorum: Abdullah ILGAZ
  LocationSensor İl ve ilçe bilgisi hassur 3 546 07-04-2017, Saat: 19:46
Son Yorum: engerex
  xe8 android telefon numarasını bulmak ? erdogan 1 1.565 07-09-2016, Saat: 09:25
Son Yorum: esistem



Konuyu Okuyanlar: 1 Ziyaretçi