Wie starte ich einen Service aus einem anderen Paket?

S

sem_thesis

Fortgeschrittenes Mitglied
0
Hallo! :biggrin:

Habe ein kleines Beginner-Problem, und zwar.
Habe 2 Pakete. Eines enthält eine Activity und soll den Service aus dem anderen Paket starten.

com.paket1.MainActivity.java
Code:
final Intent police = new Intent();               
police.setComponent(new ComponentName("com.paket2","com.paket2.ServiceClass"));
startService(police);
Eintrag im Manifest.xml:
Code:
        <service android:name ="ServiceClass"
                     android:exported="true">
            <intent-filter>
                <action android:name="com.paket2.ServiceClass">
                </action>
            </intent-filter>
        </service>
Bekomme aber trotzdem den Error:
W/ActivityManager( 105): Unable to start service Intent { cmp=com.paket2/.ServiceClass }: not found
Vorschläge von euch Experten?:biggrin:
 
probier mal

<service android:name ="com.paket2.ServiceClass"
android:exported="true">
<intent-filter>
<action android:name="com.paket2.ServiceClass">
</action>
</intent-filter>
</service>
 
swordi schrieb:
probier mal

<service android:name ="com.paket2.ServiceClass"
android:exported="true">
<intent-filter>
<action android:name="com.paket2.ServiceClass">
</action>
</intent-filter>
</service>

Danke für deine Mühe!
Ich bekomme jedoch immer noch die gleiche Fehlermeldung :(
 
Du gibst doch das allgemeine Package an für deine App, also zum Beispiel:
de.sam.thesis
Und alles weitere liegt dort drunter und aus dem Package und dem Namen wir das zusammengesetzt. Wenn du also jetzt als Servicenamen ".ServiceClass" angibst, dann muss die Klasse direkt unter dem Package zu finden sein:
de.sam.thesis.ServiceClass

Und das findet er einfach nicht.

android:name
The name of the Service subclass that implements the service. This should be a fully qualified class name (such as, "com.example.project.RoomService"). However, as a shorthand, if the first character of the name is a period (for example, ".RoomService"), it is appended to the package name specified in the <manifest> element.
There is no default. The name must be specified.
 
Achso.
Ok, in der Manifest-Deklaration habe ich das Paket angegeben.

Code:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.packet1"
      android:versionCode="1"
      android:versionName="1.0">
....
</manifest>
Du meinst also, dass er jetzt jede Klasse am 'com.packet1' anhängt?
Das würde ja heisst, dass ich nicht 2 Pakete innerhalb einer App haben kann?

Oder kann ich im Manifest einen neuen Tag für das zweite Paket generieren?
Code:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.packet2"
      android:versionCode="1"
      android:versionName="1.0">
....
</manifest>
Das würde mich echt erstaunen, wenn man nicht auf Pakete übergreifen kann..
Wenn ein Paket abstürzt, dass ist die App doch weg. Wie baut man denn da Redundanz und Stabilität in die App ein?
 
warum nicht einfach einen gemeinsamen pfad

com.meineapp.pakete.paket1
com.meineapp.pakete.paket2

und im manifest dann halt com.maineapp.pakete als package name
 
  • Danke
Reaktionen: sem_thesis
Muss ich dann auch explizit das Paket com.meineapp.pakete erstellen und die beiden Pakete reintun?
Oder genügt die Deklaration im Manifest?

Jetzt habe ich nur mal die Manifest-Deklaration umgeändert und schon bekomme ich Fehlermeldung für res.Objekte.
Überall wo ich 'R.layout.nameeineslayouts' stehen habe, zeigt Eclipse einen Fehler an :(
R cannot be resolved to a variable
 
Zuletzt bearbeitet:
Clean
 
  • Danke
Reaktionen: sem_thesis
the_alien schrieb:

Hat nicht geholfen. Auch nicht nach Eclipse-Neustart :(

Ok - ich habe also einfach ich den Klassen, wo der Fehler aufgetaucht ist 'import com.meineapps.*' importiert ...

BINGO!!! :D

Jetzt habe ich den Service ganz normal mit
Code:
            Intent police = new Intent();
            police.setAction("com.meineapps.packet2.ServiceClass");
            this.startService(police);

gestartet.

Jetzt möchte ich doch wissen - sorgt das wirklich für Stabilität? Wenn die App crasht, wird dann nur entweder Prozess com.meineapps.packet2 oder com.meineapps.packet1 unterbrochen oder geht das ganze Paket com.meineapps unter?
Denn dann hätte die Implementation hier gar nix gebracht :(
 
Zuletzt bearbeitet:
nur weil du 2 pakete gemacht hast, hast du nicht 2 prozesse.

deine app wird innerhalb eines prozesses ausgeführt.
 
swordi schrieb:
nur weil du 2 pakete gemacht hast, hast du nicht 2 prozesse.
deine app wird innerhalb eines prozesses ausgeführt.

Verdammt :'(
Genau das wollte ich vermeiden, deshalb habe ich eine Trennung eingelegt.
Ich möchte nämlich, dass das zweite Pakete vom ersten aktiviert wird, falls er abstürzt.
 
Und wie soll es das machen wenn es doch sowieso abstürzt? Dafür müsstest du die Exception fangen und dann stürzt es auch nichtmehr ab, weil die Exception wurde ja gefangen...
 
Dafür müsste ich ja auch die Exception kennen, die vorkommen kann.. und da gibt es bestimmt einige Möglichkeiten.
App neu launchen erschien mir die gemütlichere Methode..
 
eine app kann aus sehr vielen gründen abstürzen, aber man kann die meisten davon abfangen :D

ist alles eine frage der struktur :D
 
  • Danke
Reaktionen: the_alien
swordi schrieb:
eine app kann aus sehr vielen gründen abstürzen, aber man kann die meisten davon abfangen :D
ist alles eine frage der struktur :D

Genauer?
Ich muss überall try-catch Blöcke einbauen..und überlegen was für Exceptions existieren...?
 

Ähnliche Themen

L
Antworten
15
Aufrufe
905
jogimuc
J
Vapeilas91
  • Vapeilas91
Antworten
3
Aufrufe
696
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.007
Robby1950
R
Zurück
Oben Unten