2017-02-23 2 views
0

Ich habe einen Dienst geschrieben, der in einer APK enthalten ist. In dieser APK habe ich überhaupt keine Aktivität. Die Definition ist wie folgt:am startservice hat keine Netzwerkberechtigung

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

ich es kompiliert und die APK per pm installieren in einem echten Android-Handy installieren, und ich versuche, diesen Dienst über diesen Befehl zu starten:

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

Dieser Service kann korrekt gebootet werden. Es scheint jedoch, dass dieser Dienst nicht über die Netzwerkberechtigung verfügt. wie er die Anfrage senden, habe ich die folgenden Fehler:

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) 

Ich bin auf jeden Fall sicher, dass die Domain bf.xxxx.com über dieses Handy erreichbar ist.

Und ich habe eine kleine Änderung vorgenommen, eine leere Aktivität in diesem APK hinzufügen und neu installieren. Zuerst startete ich die Aktivität auf dem Bildschirm und startete dann den Dienst über einen Startservice. Zu dieser Zeit funktioniert der Service sehr gut.

Meine Frage ist, warum der Dienst keine Netzwerkberechtigung hat, wenn nur der Dienst im APK über den Befehl am läuft?

Erklärung ist hässlich erwartet! Vielen Dank.

Das gesamte manifest.xml ist:

<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 in diesem Mobile 4.4.4

+0

Konnte Sie das setzen gesamtes Manifest? Nur um die Erlaubnis zu sehen, die Sie hinzufügen – Timo

+0

@Timo gerade hinzugefügt, danke – simonzhang

+0

Und welche Version von Android? – Timo

Antwort

0

ist Wenn Sie die Version von Android verwenden> 6 Sie haben die Erlaubnis beantragen : Doc

EDIT:

ich bin nicht sicher, b ut die Erlaubnis Ihres Dienstes von der Erlaubnis der Tätigkeit abhängen, die den Service beginnen, also Sie in Ihrem Manifest spezifizieren müssen, wenn Sie Ihren Service die Erlaubnis definieren, die er benötigt, schauen Sie here Abschnitt: android: Erlaubnis

+0

Meine Android-Version in diesem Handy ist 4.4.4 – simonzhang

+0

Schauen Sie sich die EDIT – Timo

Verwandte Themen