我正在尝试使用Geocoder对象在谷歌地图中显示一个位置地址。为此,我创建了一个类FetchAddressIntentService扩展IntentService并重写onHandleIntent()方法,并使用显式intent启动该服务。但问题是,当我使用startService(intent)onHandleIntent()启动服务时,方法是not call。
我遵循的代码与android上的相同。开发者网站:
https://developer.android.com/training/location/display-address.html
这是我的代码:
public class FetchAddressIntentService extends IntentService {
protected ResultReceiver mReceiver;
public FetchAddressIntentService() {
super("abc");
}
@Override
protected void onHandleIntent(Intent intent) {
Toast.makeText(getBaseContext(),"onHandleIntent",Toast.LENGTH_LONG).show();
String errorMessage="";
Geocoder geocoder=new Geocoder(this, Locale.getDefault());
Location location = intent.getParcelableExtra(Constants.LOCATION_DATA_EXTRA);
List<Address> addresses=null;
try {
addresses=geocoder.getFromLocation(location.getLatitude(),location.getLongitude(),1);
} catch (IOException e) {
errorMessage="unhendle IO exception";
Toast.makeText(getBaseContext(),"unhendle IO exception",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
if(addresses==null && addresses.size()==0){
if(errorMessage.isEmpty()){
errorMessage="no address found";
Toast.makeText(getBaseContext(),"no address found",Toast.LENGTH_LONG).show();
}
deliverResultToReceiver(Constants.FAILURE_RESULT, errorMessage);
}
else{
Address address=addresses.get(0);
ArrayList<String> arrayListFrag=new ArrayList<>();
for (int i=0;i<address.getMaxAddressLineIndex();i++){
arrayListFrag.add(address.getAddressLine(0));
}
deliverResultToReceiver(Constants.SUCCESS_RESULT,
TextUtils.join(System.getProperty("line.separator"),
arrayListFrag));
}
}
private void deliverResultToReceiver(int successResult, String message) {
Bundle bundle=new Bundle();
bundle.putString(Constants.RESULT_DATA_KEY,message);
Toast.makeText(getBaseContext(),"resultData",Toast.LENGTH_LONG).show();
mReceiver.send(successResult,bundle);
}
}
这些方法用于启动意图服务:
protected void startIntentService(){
Intent intent=new Intent(this,FetchAddressIntentService.class);
intent.putExtra(Constants.RECEIVER, mResultReceiver);
intent.putExtra(Constants.LOCATION_DATA_EXTRA, mLastLocation);
startService(intent);
Toast.makeText(getBaseContext(),"startIntentService",Toast.LENGTH_LONG).show();
}
public void fetchAddressButtonHandler(){
if(mGoogleApiClient.isConnected() && mLastLocation!=null){
startIntentService();
Toast.makeText(getBaseContext(),"fetchAddressButtonHandler",Toast.LENGTH_LONG).show();
}
}
清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.missionandroid.googlemapproject">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".FetchAddressIntentService"
android:exported="false"></service>
</application>
</manifest>
这段代码可以从当前的lat long中获取完整的地址:
试试这个:
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
addresses = geocoder.getFromLocation(your current lat, your current long, 1);
String address = addresses.get(0).getAddressLine(0);
String city = addresses.get(0).getLocality();
String state = addresses.get(0).getAdminArea();
String country = addresses.get(0).getCountryName();
String postalCode = addresses.get(0).getPostalCode();
String knownName = addresses.get(0).getFeatureName();
本文向大家介绍如何使用HTML5地理位置和Google Maps显示当前位置?,包括了如何使用HTML5地理位置和Google Maps显示当前位置?的使用技巧和注意事项,需要的朋友参考一下 HTML5 Geolocation API使您可以与自己喜欢的网站共享位置。Javascript可以捕获您的纬度和经度,并且可以发送到后端Web服务器,并可以进行精美的位置感知操作,例如查找本地商家或在映射上
我们知道,由于臭名昭著的中国GPS偏移问题,GPS(WSG-84)地图坐标与国家批准的中国地图使用的坐标系(GCJ-02)不完全对应。 问题是,如何确保通过百度地图API在导航器报告的坐标处放置标记。地理位置。getCurrentPosition()是否符合现实? 制造或批准在中国使用的设备的GPS芯片是否会返回与用户实际位置不匹配的坐标,以匹配GJC-02地图? 用户运行中文导航器(如Maxth
本文向大家介绍如何使用HTML5地理位置定位功能,包括了如何使用HTML5地理位置定位功能的使用技巧和注意事项,需要的朋友参考一下 HTML5提供了地理位置定位功能(Geolocation API),能确定用户位置,我们可以借助HTML5的该特性开发基于地理位置信息的应用。本文结合实例给大家分享如何使用HTML5,借助百度、谷歌地图接口来获取用户准确的地理位置信息。 定位功能(Geolocatio
本文向大家介绍如何使用HTML5地理位置查找位置?,包括了如何使用HTML5地理位置查找位置?的使用技巧和注意事项,需要的朋友参考一下 HTML5 Geolocation API使您可以与自己喜欢的网站共享位置。JavaScript可以捕获您的纬度和经度,并且可以发送到后端Web服务器,并进行精美的位置感知操作,例如查找本地商家或在映射上显示您的位置。 地理位置API使用全局导航器对象的新属性,即
本文向大家介绍如何最好地在Google地图上显示HTML5地理位置的准确性?,包括了如何最好地在Google地图上显示HTML5地理位置的准确性?的使用技巧和注意事项,需要的朋友参考一下 要在Google Map上显示HTML5地理位置的准确性,请使用以下代码-
本文向大家介绍ios百度地图的使用(普通定位、反地理编码),包括了ios百度地图的使用(普通定位、反地理编码)的使用技巧和注意事项,需要的朋友参考一下 iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下: ios百度地图的使用(普通定位、反地理编码) 1.首先接受基本的地图功能 新建一个地图类,xib拖也行,我这边是代码实现的。 这样基本的地