2012-09-21 22 views
6

Tôi đang sử dụng phương thức Geocoder.getLocationFromName() trên cả trình giả lập và điện thoại của tôi (Nexus S với Android 4.1) và tôi nhận được ngoại lệ sau:Android Geocoder.getLocationFromName() ném IOException: Dịch vụ không khả dụng trên Thiết bị

java.io.IOException: Service not Available 

Có một số câu hỏi về điều này xuất hiện trên trình mô phỏng (example) và hầu hết trong số họ nói rằng đó là phiên bản trình mô phỏng cụ thể có sự cố. Tuy nhiên, ngoại lệ xuất hiện cả trên AVD (2.3 và 4.1) và điện thoại của tôi.

Cả điện thoại và AVD đều có kết nối internet. Phiên bản API của tôi là 16 (android 4.1), nhưng tôi cũng đã thử với các phiên bản cũ hơn. Cả AVD đều bao gồm các API của Google.

Bất kỳ ý tưởng gì đang diễn ra ở đây?

Đây là đoạn mã liên quan:

Geocoder myGeocoder = new Geocoder(getApplicationContext(), Locale.getDefault()); 
List<Address> newAddresses = myGeocoder.getFromLocationName(arg0.toString(), 10); 

Và đây là biểu hiện của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.asdasd" android:versionCode="6" android:versionName="1.3.1"> 
    <uses-sdk android:minSdkVersion="16" /> 
    <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" /> 
    <application android:icon="@drawable/ic_launcher_asdasd" 
     android:label="@string/app_name"> 
     <activity android:name=".AsdasdActivity" android:label="@string/app_name" 
      android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="com.google.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation" /> 
    </application> 
</manifest> 
+0

Chỉ để tham khảo, cũng có thể liên quan đến vấn đề này: http://code.google.com/p/android/issues/detail?id=38009 Khởi động lại thiết bị dường như khắc phục vấn đề này. – Somatik

+0

Không có vấn đề bao nhiêu khởi động lại tôi đã làm, nó đã không làm gì trong trường hợp của tôi. –

Trả lời

7

Hãy chắc chắn rằng xây dựng mục tiêu ứng dụng của bạn được thiết lập để một trong những API của Google và không chỉ đơn giản Android 4.0 (hoặc tương tự). Bạn có thể thay đổi cài đặt này trong Eclipse bằng cách nhấp chuột phải vào dự án của bạn và chọn "Thuộc tính" rồi chọn "Android". Ngoài ra, bạn có thể dễ dàng chỉnh sửa file project.properties một cái gì đó như sau:

# Project target 
target=Google Inc.:Google APIs:16 

Lý do là lớp Geocoder hiện diện trong khuôn khổ Android lõi, nhưng phụ thuộc vào mã đóng góp của các API của Google để hoạt động đúng. Ngay cả khi AVD của bạn có API Google, dự án của bạn vẫn cần được xây dựng dựa trên mục tiêu xây dựng cụ thể đó.

+0

Cảm ơn câu trả lời. Nhưng như tôi đã nói, tôi đang sử dụng các API AVD của Google. Và tôi cũng có cùng một vấn đề trên điện thoại của tôi. –

+0

Hey @MarkosFragkakis, bạn cho biết bạn đang sử dụng API của Google trong AVD, nhưng mục tiêu xây dựng của dự án của bạn cũng được đặt ở cùng cấp Google API không? Đây là hai cài đặt khác nhau. – twaddington

+1

Bạn nói đúng. Tôi đã thay đổi mục tiêu thành cái mà bạn đã đề xuất (thông qua Eclipse). Tuy nhiên, bây giờ tôi nhận được một "java.io.IOException: Không thể phân tích phản hồi từ máy chủ". Tôi cho rằng đây là một vấn đề khác, vì vậy tôi sẽ đánh dấu câu trả lời của bạn là câu trả lời đúng. Tuy nhiên, nếu bạn có bất cứ đề nghị, họ được chào đón nhiều hơn. Cảm ơn. –

Các vấn đề liên quan