2017-02-23 26 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