我写了一个包含在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
答案 0 :(得分:0)
如果您使用的是Android版本&gt; 6您必须申请许可:Doc
编辑:
我不确定,但您的服务权限取决于启动服务的活动的权限,因此您需要在定义服务时在清单中指定其需要的权限{{3 section:android:permission