Jak uzyskać dostęp do kompasu iPhone'a w Firemonkey?Jak uzyskać dostęp do kompasu w systemie iOS?
Odpowiedz
Oto film howto: http://blogs.embarcadero.com/ao/2011/10/13/39171
Pełny kod źródłowy: http://cc.embarcadero.com/item/28536
I (krótka) artykuł: http://edn.embarcadero.com/article/41715
A oto kod źródłowy komponentu kompasu.
Nie próbowałem jeszcze, ale powinno działać.
unit Compass;
{Based on Anders Ohlsson Firemonkey Compass example}
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$modeswitch objectivec1}
{$ENDIF}
interface
uses
SysUtils, Classes, FMX_Types
{$IFDEF FPC}
, iPhoneAll
{$ENDIF}
;
type
TUpdateEvent = TNotifyEvent;
TiOSGPSCompass = class(TFmxObject)
private
FLatitude: Double;
FLongitude: Double;
FAltitude: Double;
FHeading: Double;
FOnUpdate: TUpdateEvent;
UpdateNeeded: Boolean;
protected
procedure SetLatitude(value: Double);
procedure SetLongitude(value: Double);
procedure SetAltitude(value: Double);
procedure SetHeading(value: Double);
procedure Update;
public
constructor Create(AOwner: Classes.TComponent); override;
destructor Destroy; override;
published
property Latitude: Double read FLatitude;
property Longitude: Double read FLongitude;
property Altitude: Double read FAltitude;
property Heading: Double read FHeading;
property OnUpdate: TUpdateEvent read FOnUpdate write FOnUpdate;
end;
var
MyGPSCompass: TiOSGPSCompass = nil;
procedure Register;
implementation
{$IFDEF FPC}
uses
CoreLocation;
{$ENDIF}
{$IFDEF FPC}
type
MyCLController = objcclass(NSObject)
locationManager : CLLocationManager;
procedure locationManager_didUpdateToLocation_fromLocation(manager: CLLocationManager; newLocation, oldLocation: CLLocation); message 'locationManager:didUpdateToLocation:fromLocation:';
procedure locationManager_didUpdateHeading(manager: CLLocationManager; newHeading: CLHeading); message 'locationManager:didUpdateHeading:';
end;
var
Controller : MyCLController;
{$ENDIF}
{$IFDEF FPC}
procedure MyCLController.locationManager_didUpdateToLocation_fromLocation(manager: CLLocationManager; newLocation, oldLocation: CLLocation);
begin
if Assigned(MyGPSCompass) then begin
MyGPSCompass.SetLatitude(newLocation.coordinate.latitude);
MyGPSCompass.SetLongitude(newLocation.coordinate.longitude);
MyGPSCompass.SetAltitude(newLocation.altitude);
MyGPSCompass.Update;
end;
end;
{$ENDIF}
{$IFDEF FPC}
procedure MyCLController.locationManager_didUpdateHeading(manager: CLLocationManager; newHeading: CLHeading);
begin
if Assigned(MyGPSCompass) then begin
MyGPSCompass.FCompassHeading:= newHeading.magneticheading;
MyGPSCompass.Update;
end;
end;
{$ENDIF}
constructor TiOSGPSCompass.Create(AOwner: TComponent);
begin
inherited;
{$IFDEF FPC}
Controller := MyCLController.alloc.init;
Controller.locationManager := CLLocationManager.alloc.init;
Controller.locationManager.setDelegate(Controller);
Controller.locationManager.setDesiredAccuracy(kCLLocationAccuracyBestForNavigation);
Controller.locationManager.startUpdatingLocation;
Controller.locationManager.startUpdatingHeading;
{$ENDIF}
MyGPSCompass:= Self;
end;
destructor TiOSGPSCompass.Destroy;
begin
{$IFDEF FPC}
Controller.locationManager.release;
Controller.release;
{$ENDIF}
inherited;
end;
procedure TiOSGPSCompass.SetLatitude(value: Double);
begin
if (FLatitude <> value) then begin
FLatitude:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.SetLongitude(value: Double);
begin
if (FLongitude <> value) then begin
FLongitude:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.SetAltitude(value: Double);
begin
if (FAltitude <> value) then begin
FAltitude:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.SetHeading(value: Double);
begin
if (FHeading <> value) then begin
FHeading:= value;
UpdateNeeded:= True;
end;
end;
procedure TiOSGPSCompass.Update;
begin
if (UpdateNeeded and Assigned(OnUpdate)) then OnUpdate(Self);
UpdateNeeded:= False;
end;
procedure Register;
begin
RegisterComponents('iOS', [TiOSGPSCompass]);
end;
end.
+1 Byłoby jednak dobrze, aby odpowiednie części zawarte w odpowiedzi, jeśli to w ogóle możliwe. – jpfollenius
@Smasher, zobaczę, co mogę zrobić. – Johan
@Smasher, dodano kod źródłowy komponentu kompasu – Johan
- 1. dostęp do kompasu iPhone'a z JavaScriptem
- 2. Jak uzyskać kierunek kompasu
- 3. Dostęp do dekodera wideo w systemie iOS?
- 4. iOS: Tworzenie kompasu 3D
- 5. Symulator iOS i XCode do symulacji kompasu?
- 6. Jak uzyskać dostęp do parametrów zlecenia w systemie Meteor?
- 7. Jak uzyskać dostęp do ios 6 mobilnego inspektora Safari w systemie Windows lub Linux?
- 8. Jak uzyskać dostęp do WinRM w C#
- 9. Jak uzyskać dostęp do uruchomionego procesu?
- 10. Jak uzyskać dostęp do RouteTable.Routes.MapHttpRoute?
- 11. Jak programowo uzyskać dostęp do przypomnień?
- 12. Jak uzyskać dostęp do aplikacji?
- 13. Jak uzyskać dostęp do GetGlobalResourceObject()
- 14. Jak uzyskać dostęp do kontaktów użytkownika Gmaila?
- 15. Jak wykrywać stan przełącznika kalibracji kompasu na iOS
- 16. Jak uzyskać dostęp i modyfikować kontakty w systemie Windows 8?
- 17. Jak uzyskać dostęp do ARGV w Mathematica?
- 18. Jak uzyskać dostęp do sesji w webmethod?
- 19. Jak uzyskać dostęp do process.env w Meteor?
- 20. Jak uzyskać dostęp do mikrofonu w JS?
- 21. Jak uzyskać miniatury z dowolnego adresu URL w systemie iOS?
- 22. Jak uzyskać rozmiar klawiatury innej firmy w systemie iOS 8?
- 23. Przewodnik kompasu do celu GPS
- 24. Jak uzyskać dostęp do książki adresowej iPhone'a w aplikacji internetowej?
- 25. Błąd "pomijanie kompasu", którego nie ma w systemie ŚCIEŻKA
- 26. Błąd z odpytywaniem kompasu w systemie Windows 7
- 27. Zresetuj dostęp do kontaktów w symulatorze iOS?
- 28. Jak uzyskać dostęp do plików lokalnych w ramach projektu
- 29. Jak uzyskać uruchamianie natywnego trybu run-ios w systemie iTerm zamiast terminalu w systemie MacOS?
- 30. jak uzyskać dostęp do wewnętrznych danych jquery?
Nie rozumiem, to jest coś w stylu: pytam, daję odpowiedź? – RBA
@RBA, właśnie udostępniam moją zakładkę. Mam nadzieję, że to jest przydatne. WIĘC pozwala na to, zobacz FAQ. – Johan
Rzeczywiście :) masz absolutną rację, to był powód, by dać ci +1. IMHO, to również powinno być umieszczone na wiki, ponieważ jest to dobre pytanie na temat rozwoju iOS. – RBA