Ich habe eine Serviceklasse. Ich habe diese Klasse in jar exportiert und das jar in meine Client-App eingebettet.
Bei Bedarf rufe ich die Serviceklasse an. Wenn ich dies versuche, wird folgende Fehlermeldung angezeigt:
Unable to start service Intent {comp={com.sample.service/com.sample.service.serviceClass}} : not found
Ich habe außer der Serviceklasse eine andere Klasse, auf die ich zugreifen kann (Objekt dieser Klasse erstellen), die sich im selben Glas befindet.
Ich habe das Gefühl, dass ich etwas in meiner Konfiguration oder meinem Manifest oder so verpasst habe.
Bitte helfen Sie mir, das gleiche zu identifizieren. Mein Code ist unten:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent () ;
intent.setClassName("com.sample.service" ,"com.sample.service.serviceClass") ;
this.startService(intent) ; // when I call this line I get the message...
// binding other process continue here
}
Client manifest.xml
<service android:name="com.sample.service.serviceClass"
android:exported="true" android:label="@string/app_name"
android:process=":remote">
<intent-filter><action android:name="com.sample.service.serviceClass"></action>
</intent-filter>
</service>
Vielen Dank im Voraus,
Vinay
Antworten:
Erstens brauchen Sie es nicht
android:process=":remote"
, also entfernen Sie es bitte, da es nur zusätzlichen Arbeitsspeicher ohne Nutzen beansprucht.Zweitens, da das
<service>
Element eine Aktionszeichenfolge enthält, verwenden Sie diese:quelle
android:process=":remote"
Entfernen Sie ihn daher, da er nur zusätzlichen Arbeitsspeicher ohne Nutzen beansprucht. Ein Remotedienst bietet eine API über AIDL an und hat nichts mit demandroid:process
Attribut zu tun . Hier ist ein Beispiel für einen Remote-Dienst: github.com/commonsguy/cw-advandroid/tree/master/AdvServices/… und hier ist ein entsprechender Kunde dieses Dienstes: github.com/commonsguy/cw-advandroid/tree/master/AdvServices/ …Für alle anderen, die auf diesen Thread stießen, hatte ich dieses Problem und zog mir die Haare aus. Ich hatte die Service-Deklaration AUSSERHALB des End-Tags '<Anwendung>' DUH!
RICHTIG:
FALSCH aber immer noch fehlerfrei kompiliert:
quelle
1) Überprüfen Sie, ob die Dienstdeklaration im Manifest im Anwendungs-Tag verschachtelt ist
2) Überprüfen Sie, ob Sie
service.java
sich im selben Paket oder Diff-Paket wie die Aktivität befindenquelle
Ich hoffe, ich kann auch jemandem mit diesen Informationen helfen: Ich habe meine Serviceklasse in ein anderes Paket verschoben und die Referenzen korrigiert. Das Projekt war vollkommen in Ordnung, ABER die Serviceklasse konnte von der Aktivität nicht gefunden werden.
Beim Betrachten der Anmeldung in logcat bemerkte ich die Warnung zu dem Problem: Die Aktivität konnte die Serviceklasse nicht finden, aber das Komische war, dass das Paket falsch war und ein "/" Zeichen enthielt. Der Compiler suchte
anstatt
Ich habe die Serviceklasse aus dem Paket heraus und wieder hineingezogen und alles hat gut funktioniert.
quelle
In meinem Fall die maximale Obergrenze von 1 MB für den Datentransport durch Intent. Ich werde nur Cache oder Speicher verwenden.
quelle
Ich habe das gleiche Problem gefunden. Ich habe fast einen Tag verloren, als ich versucht habe, einen Dienst von der
OnClickListener
Methode aus zu starten - außerhalb deronCreate
und nach einem Tag bin ich immer noch gescheitert !!!! Sehr frustrierend! Ich habe mir das Beispielbeispiel angesehenRemoteServiceController
. Ihre funktioniert, aber meine Implementierung funktioniert nicht!Der einzige Weg, der für mich funktionierte, war von innen heraus
onCreate
. Keine der anderen Varianten hat funktioniert und glauben Sie mir, ich habe sie alle ausprobiert.Fazit:
Auch das eine "/" konnte keinen Pfad zum Dienst finden, versuchte mit
Intent(package,className)
und nichts zu beginnen, auch eine andere Art von AbsichtsstartIch habe die Serviceklasse in dasselbe Paket der Aktivität Final Form verschoben, das funktioniert
Hoffentlich hilft dies jemandem, indem die Listener
onClick
innerhalb deronCreate
Methode wie folgt definiert werden :Stellen Sie auch für die Manifest-Datei sehr wichtig, dass der Dienst der Anwendung untergeordnet ist:
quelle