我的startservice没有网络权限

时间:2017-02-23 08:29:57

标签: android service

我写了一个包含在APK中的服务。在这个APK中,我根本没有任何活动。定义如下:

<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>

我编译了它并通过pm安装在真正的Android手机中安装APK,我尝试通过此命令启动此服务:

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启动了服务。目前,该服务运作良好。

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

解释是丑陋的预期!非常感谢。

整个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:此手机中的Android为4.4.4

1 个答案:

答案 0 :(得分:0)

如果您使用的是Android版本&gt; 6您必须申请许可:Doc

编辑:

我不确定,但您的服务权限取决于启动服务的活动的权限,因此您需要在定义服务时在清单中指定其需要的权限{{3 section:android:permission