2017-02-23 73 views
0

我写了一个服务,它包含在APK中。在这个APK中,我没有任何活动。该定义如下:am startservice没有网络权限

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 

    android:theme="@style/AppTheme"> 
    <service android:name="com.blackforest.service.KeyService" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="com.blackforest.service.KeyService"/> 
     </intent-filter> 
    </service> 
</application> 

我编译它,并通过点安装APK安装在一个真正的Android手机,我尝试通过这个命令来启动该服务:

am startservice --user 0 -n com.blackforest.service/.KeyService 

该服务可正确启动。但似乎这个服务没有网络权限。因为它发送请求,我得到了以下错误:

02-23 16:22:29.685 22689-22714/com.blackforest.service W/System.err: java.net.UnknownHostException: Unable to resolve host "bf.xxxx.com": No address associated with hostname 
02-23 16:22:29.686 22689-22714/com.blackforest.service W/System.err:  at java.net.InetAddress.lookupHostByName(InetAddress.java:424) 
02-23 16:22:29.686 22689-22714/com.blackforest.service W/System.err:  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
02-23 16:22:29.686 22689-22714/com.blackforest.service W/System.err:  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
02-23 16:22:29.686 22689-22714/com.blackforest.service W/System.err:  at okhttp3.Dns$1.lookup(Dns.java:39) 

我绝对肯定域bf.xxxx.com是通过该手机访问。

我做了一些改动,在这个APK中添加了一个空白的活动,然后重新安装它。首先,我在屏幕上启动了该活动,然后通过startservice启动该服务。目前,该服务运行良好。

我的问题是,为什么服务没有网络权限,如果只有APK中的服务通过am命令引导?

说明是丑陋的预期!非常感谢。

整个manifest.xml的是:

<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" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<uses-permission android:name="android.permission.WRITE_CONTACTS"/> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 

    android:theme="@style/AppTheme"> 
    <service android:name="com.blackforest.service.KeyService" 
     android:enabled="true" 
     android:exported="true" 

     > 
     <intent-filter> 
      <action android:name="com.blackforest.service.KeyService"/> 
     </intent-filter> 
    </service> 

    <activity android:name=".MainActivity"> 
    </activity> 
</application> 

PS:机器人在这个移动是4.4.4

+0

你能否把整个清单?只是看到您添加的权限 – Timo

+0

@Timo刚添加,谢谢 – simonzhang

+0

和哪个版本的android? – Timo

回答

0

如果你使用Android> 6的版本,你必须申请许可:Doc

编辑:

我不知道b取决于你的服务的许可取决于启动服务的活动的权限,所以你需要在你的清单中指定你的服务时需要它的权限看看here部分:android:permission

+0

我的Android手机版本是4.4.4 – simonzhang

+0

看编辑 – Timo