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 das versuche, erhalte ich die folgende Fehlermeldung:
Unable to start service Intent {comp={com.sample.service/com.sample.service.serviceClass}} : not found
Ich habe eine andere Klasse als die Service-Klasse, auf die ich zugreifen kann (Objekt dieser Klasse erstellen), die sich im selben Glas befinden.
Ich habe das Gefühl, etwas in meiner Konfiguration oder in meinem Manifest verpasst zu haben.
Bitte helfen Sie mir, dasselbe 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>
Danke im Voraus,
Vinay
Erstens brauchen Sie nicht Android:process=":remote"
, also bitte entfernen Sie es, da alles, was es tun wird, extra RAM ohne Nutzen in Anspruch nehmen wird.
Zweitens, seit dem <service>
Element enthält eine Aktionszeichenfolge, verwenden Sie es:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent=new Intent("com.sample.service.serviceClass");
this.startService(intent);
}
Für alle anderen, die auf diesen Thread gestoßen sind, hatte ich dieses Problem und zog mir die Haare aus. Ich hatte die Service-Deklaration AUSSERHALB des End-Tags '<application>' DUH!
RECHTS:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
...>
...
<application Android:icon="@drawable/icon" Android:label="@string/app_name">
<activity ...>
...
</activity>
<service Android:name=".Service"/>
<receiver Android:name=".Receiver">
<intent-filter>
...
</intent-filter>
</receiver>
</application>
<uses-permission Android:name="..." />
FALSCH aber trotzdem fehlerfrei kompiliert:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
...>
...
<application Android:icon="@drawable/icon" Android:label="@string/app_name">
<activity ...>
...
</activity>
</application>
<service Android:name=".Service"/>
<receiver Android:name=".Receiver">
<intent-filter>
...
</intent-filter>
</receiver>
<uses-permission Android:name="..." />
1) Überprüfen Sie, ob die Dienstdeklaration im Manifest im Anwendungstag verschachtelt ist
<application>
<service Android:name="" />
</application>
2) überprüfe ob dein service.Java
befindet sich im selben Paket oder Diff-Paket wie die Aktivität
<application>
<!-- service.Java exists in diff package -->
<service Android:name="com.package.helper.service" />
</application>
<application>
<!-- service.Java exists in same package -->
<service Android:name=".service" />
</application>
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.
Als ich mir logcat anschaute, bemerkte ich die Warnung bezüglich des Problems: Die Aktivität konnte die Serviceklasse nicht finden, aber das Komische war, dass das Paket nicht korrekt war und ein "/" - Zeichen enthielt. Der Compiler hat gesucht
com.something./service.MyService
anstatt
com.something.service.MyService
Ich habe die Serviceklasse aus dem Paket genommen und wieder aufgenommen, und alles hat einwandfrei funktioniert.
In meinem Fall die 1 MB maximale Obergrenze für den Datentransport von Intent. Ich werde nur Cache oder Speicher verwenden.
Ich habe das gleiche Problem gefunden. Ich habe fast einen Tag beim Versuch verloren, einen Dienst mit der OnClickListener
-Methode zu starten - außerhalb der onCreate
-Methode, und nach 1 Tag bin ich immer noch gescheitert !!!! Sehr frustrierend! Ich habe mir das Beispiel RemoteServiceController
angesehen. Ihre funktioniert, aber meine Implementierung funktioniert nicht!
Der einzige Weg, der für mich funktioniert hat, war von innen onCreate
Methode. Keine der anderen Varianten hat funktioniert und glaube mir, ich habe sie alle ausprobiert.
Fazit:
Auch das eine "/" konnte den Pfad zum Dienst nicht finden, versuchte mit Intent(package,className)
zu beginnen und nichts, auch andere Art von Intent-Start
Ich habe die Serviceklasse in dasselbe Paket der Aktivität Endgültiges Formular verschoben, das funktioniert
Hoffentlich hilft dies jemandem, indem die Listener onClick
in der onCreate
-Methode wie folgt definiert werden:
public void onCreate() {
//some code......
Button btnStartSrv = (Button)findViewById(R.id.btnStartService);
Button btnStopSrv = (Button)findViewById(R.id.btnStopService);
btnStartSrv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startService(new Intent("RM_SRV_AIDL"));
}
});
btnStopSrv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
stopService(new Intent("RM_SRV_AIDL"));
}
});
} // end onCreate
Stellen Sie auch für die Manifest-Datei sicher, dass der Dienst der Anwendung untergeordnet ist:
<application ... >
<activity ... >
...
</activity>
<service
Android:name="com.mainActivity.MyRemoteGPSService"
Android:label="GPSService"
Android:process=":remote">
<intent-filter>
<action Android:name="RM_SRV_AIDL" />
</intent-filter>
</service>
</application>