Firemonkeyでiphoneコンパスにアクセスするにはどうすればよいですか?iOSのコンパスにアクセスするにはどうすればよいですか?
答えて
はここハウツービデオだ:http://blogs.embarcadero.com/ao/2011/10/13/39171
完全なソースコード:http://cc.embarcadero.com/item/28536
そして(ショート)の記事:http://edn.embarcadero.com/article/41715
そして、ここでは、コンパス・コンポーネントのソースコードです。
まだ試したことはありませんが、うまくいくはずです。
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これはすべて可能であれば、あなたの答えに関連する部分を含めることは良いでしょう。 – jpfollenius
@ Smasher、私は何ができるかを見ていきます。 – Johan
@Smasher、コンパスコンポーネントのソースコードを追加しました – Johan
- 1. iOSのカスタムキーボード:UITextFieldにアクセスするにはどうすればよいですか?
- 2. WiFiManagerフレームワークのiOSにアクセスするにはどうすればよいですか?
- 3. iOSウェブアプリでコンパス見出しを検索するにはどうすればよいですか?
- 4. iOSのPhoneGapで作成されたHTML5ローカルストレージにアクセスするにはどうすればよいですか?
- 5. iOSアプリケーション内からiCloudドライブのファイルにアクセスするにはどうすればよいですか?
- 6. iOSプロジェクトでブラウザの履歴にアクセスするにはどうすればよいですか?
- 7. フレックスモバイルプロジェクトからiOSカメラロールにアクセスするにはどうすればよいですか?
- 8. iOSのビデオ出力機能にアクセスするにはどうすればよいですか?
- 9. iOSでJPEG COMセグメントにアクセスするにはどうすればよいですか?
- 10. iOSで写真ライブラリにアクセスするにはどうすればよいですか?
- 11. カスタムメイドクラスからメソッドにアクセスするにはどうすればよいですか?
- 12. CasperJSからiframeにアクセスするにはどうすればよいですか?
- 13. ゲストマシンからホストマシンにアクセスするにはどうすればよいですか?
- 14. APIからプライベートスプレッドシートにアクセスするにはどうすればよいですか?
- 15. ウェブ上のコピーバッファにアクセスするにはどうすればよいですか?
- 16. モバイルへのユーザコールにアクセスするにはどうすればよいですか?
- 17. サービス内のデータベースにアクセスするにはどうすればよいですか?
- 18. Djangoフォームフィールドのデータにアクセスするにはどうすればよいですか?
- 19. MacBookのウェブカメラにアクセスするにはどうすればよいですか?
- 20. iPhone 4のUDIDにアクセスするにはどうすればよいですか?
- 21. DbContextクラスのコンフィグレーションにアクセスするにはどうすればよいですか?
- 22. マルチレベルオブジェクトの配列にアクセスするにはどうすればよいですか?
- 23. 別のエンジンモデルにアクセスするにはどうすればよいですか?
- 24. 自分のパブリックメソッドにアクセスするにはどうすればよいですか?
- 25. コントローラのエイリアス値にアクセスするにはどうすればよいですか?
- 26. Messengerプラットフォームのアプリダッシュボードにアクセスするにはどうすればよいですか?
- 27. アレイ内のオブジェクトにアクセスするにはどうすればよいですか?
- 28. アプリケーションのバージョンにアクセスするにはどうすればよいですか?
- 29. Dartのargv /コマンドラインオプションにアクセスするにはどうすればよいですか?
- 30. SassのRailsオブジェクトにアクセスするにはどうすればよいですか?
わかりませんが、これは次のようなものです:私は答えますか? – RBA
@RBA、ブックマークを共有するだけです。それが役に立つと願っています。それは可能ですが、FAQを参照してください。 – Johan
確かにあなたは完全に正しいです、これがあなたに+1を与える理由でした。 IMHO、これはまた、iOS開発の良い質問であるので、wikiに載せる必要があります。 – RBA