Получить название города по широте и долготе в Android. Служба недоступна Android 4.0.3?

Я использую версию Android 4.0.3 в приложениях. Теперь я хочу получить название города или другую информацию из ШИРОТЫ и ДОЛГОТЫ, но когда я запускаю приложения, служба показать мне недоступна.

Логкат

  01-10 13:58:29.279: W/System.err(1211): java.io.IOException: Service not Available
    01-10 13:58:29.289: W/System.err(1211):     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
    01-10 13:58:29.299: W/System.err(1211):     at com.example.vixxa.VisitorActivity$CityAsyncTask.doInBackground(VisitorActivity.java:601)
    01-10 13:58:29.319: W/System.err(1211):     at com.example.vixxa.VisitorActivity$CityAsyncTask.doInBackground(VisitorActivity.java:1)
    01-10 13:58:29.329: W/System.err(1211):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
    01-10 13:58:29.329: W/System.err(1211):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    01-10 13:58:29.339: W/System.err(1211):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    01-10 13:58:29.349: W/System.err(1211):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    01-10 13:58:29.349: W/System.err(1211):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    01-10 13:58:29.359: W/System.err(1211):     at java.lang.Thread.run(Thread.java:856)

CodeAsynctak.java

public class CityAsyncTask extends AsyncTask<String , String,String>
    {

        @Override
        protected String doInBackground(String... params) {

             Geocoder geocoder = new Geocoder(VisitorActivity.this, Locale.getDefault());
                try
                {
                    List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
                    Log.e("Addresses","-->"+addresses);

                }
                catch (IOException e)
                {
                    e.printStackTrace();

                }

            return null;
        }

    }

person Mahesh    schedule 10.01.2013    source источник
comment
Вы тестируете его на устройстве/эмуляторе?   -  person Archie.bpgc    schedule 10.01.2013
comment
поместите сюда свою ошибку logcat   -  person Dixit Patel    schedule 10.01.2013
comment
теперь проверьте это, я поместил сюда свой логарифм   -  person Mahesh    schedule 10.01.2013


Ответы (4)


Попробуйте использовать этот код, он работал на моем TAB2.

public class CityAsyncTask extends AsyncTask<String , String,String>
{

    @Override
    protected String doInBackground(String... params) {

         Geocoder geocoder = new Geocoder(LatLongActivity.this, Locale.getDefault());
            try
            {
                List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
                Log.e("Addresses","-->"+addresses);
                result = addresses.get(0).toString();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        return result;
    }
    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        AlertDialog.Builder alert = new AlertDialog.Builder(LatLongActivity.this);
        alert.setTitle("ADDRESS");
        alert.setMessage(result);
        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                dialog.dismiss();
            }
        });
        alert.setCancelable(false);
        alert.show();
    }
}
person Milind D    schedule 10.01.2013

попробуйте с приведенным ниже кодом, который я использовал в своем приложении:

Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);

        try {
            List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1);

            if(addresses != null) {
                Address returnedAddress = addresses.get(0);
                StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
                for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                    strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
                }
                myAddress.setText(strReturnedAddress.toString());
            }
            else{
                myAddress.setText("No Address returned!");
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            myAddress.setText("Can not get Address!");
        }
person Bhavesh Patadiya    schedule 10.01.2013

Скорее всего, целью сборки вашего проекта является Android 4.0 вместо Google APIs. В Eclipse щелкните проект правой кнопкой мыши и выберите свойства, перейдите в Android, выберите Google APIs

person midhunhk    schedule 10.01.2013

Чтобы устранить ошибку Сервис недоступен

Добавьте эту строку в приложение как прямой дочерний элемент в манифесте.

<uses-library android:name="com.google.android.maps"/>

обновите свой манифест следующим образом

<application
        android:name="pkgname"
        android:allowBackup="true"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme" >
        <uses-library android:name="com.google.android.maps" />

        <activity
            android:name=".yourlaunchingactivity"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
   <activity
             .......
     </activity>
   <activity
             ......
       </activity>
</application>
person Abhi    schedule 21.07.2015