2013-03-06 3 views
0

Я получаюSecurityException в геокодировщик

java.lang.SecurityException: Not allowed to bind to service Intent { act=com.android.location.service.GeocodeProvider pkg=com.google.android.location } 

при попытке сделать выборку геокода на моем Jellybean устройства.

Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());     
try {      
    List<Address> listAddresses = geocoder.getFromLocation(latitude, longitude, 1); 
    if (null != listAddresses && listAddresses.size() > 0) 
     currentAddress =listAddresses.get(0); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

У меня есть разрешения ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, INTERNET добавил. Как этого избежать, чтобы получить геокод все время?


AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="xxx" 
    android:versionCode="15" 
    android:versionName="0.5" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="16" /> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

    <permission 
     android:name="xxx.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="xxx.permission.C2D_MESSAGE" /> 
    <!-- App receives GCM messages. --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <!-- GCM connects to Google Services. --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- GCM requires a Google account. --> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <!-- Keeps the processor from sleeping when a message is received. --> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.NETWORK" /> 
    <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 

    <application 
     android:allowBackup="true" 
     android:hardwareAccelerated="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".DashboardActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
      android:windowSoftInputMode="adjustPan" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" 
      android:screenOrientation="portrait" > 
     </activity> 

     <receiver 
      android:name="com.google.android.gcm.GCMBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

       <category android:name="xxx" /> 
      </intent-filter> 
     </receiver> 

     <service android:name="xxx.GCMIntentService" /> 

     <meta-data 
      android:name="com.facebook.sdk.ApplicationId" 
      android:value="@string/app_id" /> 

     <activity android:name="com.facebook.LoginActivity" > 
     </activity> 
    </application> 

</manifest> 

(Имя пакета был заменен xxx.)

+0

plz добавить файл AndroidManifest.xml xml –

+1

Кажется [проблема] (https://code.google.com/p/android/issues/detail?id=39635) – StarPinkER

+0

@JermaineXu, Да, я видел это, есть ли несмотря на это, обходной путь для получения геокода? – Alok

ответ

1

Замените эту строку

Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault()); 

с

Geocoder geocoder = new Geocoder(<Your Activity Name>.this, Locale.getDefault()); 

также, пожалуйста, проверьте, если вы добавили эти разрешения под манифестом тега не под тегом приложения (случился со мной однажды).

В противном случае я не думаю, что с вашим кодом что-то не так. Если проблема по-прежнему существует, попробуйте перезагрузить устройство, а затем повторите попытку запуска кода, так как это может быть проблема с оборудованием.

+0

Разрешения добавляются должным образом в манифест. Этот фрагмент кода находится внутри «Шерлок-Фрагмента». Но это не проблема. – Alok

+0

Перезагрузка устройства. Но хотелось бы обработать его для конечного пользователя, не перезагружая его. – Alok

+1

Хорошо, что этого не происходит очень часто, вы можете создать диалоговое окно с просьбой перезагрузить устройство на блоке catch, обрабатывая это исключение. Я имею в виду, что это сообщение об ошибке, о которой мы не можем много сделать. –

1

Проверьте Android Manifest код.

Как правило, java.lang.SecurityException происходит потому, что вы можете ввести две записи, указывающие на ту же активность. Удалите второй и проверьте его один раз.

 Смежные вопросы

  • Нет связанных вопросов^_^