先上源码,在解释。
- implementation
- uses androidapi.jni.JavaTypes, androidapi.jni.Location, FMX.helpers.android,
- androidapi.jni.GraphicsContentViewText, androidapi.jnibridge;
- // context在android的content.context包
- // ILocalObject在androidapi.jnibridge里
- // sharedActivitycontext在fmx.helpers里
- {$R *.fmx}
- // 用android的地理GPS定位函数
- procedure TForm1.Button1Click(Sender: TObject);
- const
- LGoogleMapURL: string = 'https://maps.google.com/maps?q=%s,%s&output=embed';
- var
- LocationManagerService: JObject;
- Location: JLocation;
- fLocationManager: JLocationManager;
- Lat: string;
- Lon: string;
- Alt: string;
- begin
- if not assigned(fLocationManager) then
- begin
- //获得Java对象
- LocationManagerService := sharedActivitycontext.getSystemService
- (TJcontext.JavaClass.LOCATION_SERVICE);
- // 获得对象的java实例
- fLocationManager := tjlocationmanager.Wrap
- ((LocationManagerService as ILocalObject).GetObjectID);
- end;
- Java的方法。
- // use the gps provider to get current lat, long and altitude
- Location := fLocationManager.getLastKnownLocation
- (tjlocationmanager.JavaClass.GPS_PROVIDER);
- lat:=format('%2.6f',[location.getLatitude]);
- lon:=format('%2.6f',[location.getLongitude]);
- Alt := format('%2.6f',[location.getAltitude]);
- edit1.Text:=lat;
- edit2.Text:=lon;
- WebBrowser1.Navigate(Format(LGoogleMapURL, [Lat, Lon]));
- end;
- end.
通过JNI调用Java服务,基本就是这个步骤。
http://blog.csdn.net/syndicater/article/details/18548817