wake-up-neo.com

Service Intent kann nicht gestartet werden

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

80
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);
}
48
CommonsWare

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="..." />
72
Blundell

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

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.

5
sataniccrow

In meinem Fall die 1 MB maximale Obergrenze für den Datentransport von Intent. Ich werde nur Cache oder Speicher verwenden.

0
ranbuch

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:

  • Wenn Sie Ihre Serviceklasse in ein anderes Paket als mainActivity einfügen, werden alle Arten von Fehlern angezeigt
  • 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>
0
marisxanis