2017-02-09 25 views
0

Я наткнулся на проблему, которую я просто не могу исправить.Исключение для службы Android - разрешение отказано в отсутствии разрешения в сети Интернет

2 сценария, в первый раз пользователь нажимает кнопку, которая запускает метод в MainActivity, чтобы сделать веб-запрос. Это не проблема.

Во втором сценарии я хочу сделать этот запрос автоматически в службе, запущенной в фоновом режиме, как только код перемещается в Сервис, он делает исключение для разрешения.

Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?) 

Я могу запустить службу прекрасно, но если я двигаю все сетевые запросы на службу, то я с проблемами разрешения.

У меня уже есть <uses-permission android:name="android.permission.INTERNET"/> и <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> в моем AndroidManifest.xml файле.

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

Любые идеи?

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="domain"> 

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <service 
     android:name="domain.RemoteCommunicationService" 
     android:isolatedProcess="true" 
     android:exported="true"> 
    </service> 
    <receiver android:name="domain.RemoteServiceRestartReceiver" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="domain.RemoteServiceRestart"></action> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="domain.RemoteCommunicationService$RemoteCommunicationReceiver" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="domain.RemoteCommunication.ToggleLight"></action> 
     </intent-filter> 
    </receiver> 
</application> 

+0

показать свой файл манифеста –

+0

@Jonas D разместим ваш манифест и то, что ваш SDK, если его 23 или выше, вам может понадобиться во время выполнения завивки –

+0

Добавлен файл манифеста - проблема возникает только в RemoteCommuincationService, а не в моем Main Мероприятия. –

ответ

1

Вы должны использовать isolateProcess для true. Прочитайте, что должны сказать документы:

Если установлено значение true, эта служба будет работать под особым процессом, который изолирован от остальной части системы и не имеет собственных разрешений. Единственное сообщение с ним - через Service API (привязка и запуск).

+0

omfg ... Я потратил часы, пытаясь найти решение ... СПАСИБО СМОТРЕТЬ! –

+0

добро пожаловать ... и не забудьте принять, решит ли ваша проблема – d1vivek681065

+0

Я за несколько минут, когда этот вариант станет доступен :) –

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

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