1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Wie starte ich einen Service aus einem anderen Paket?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von sem_thesis, 12.06.2011.

  1. sem_thesis, 12.06.2011 #1
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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:
    Vorschläge von euch Experten?:biggrin:
     
  2. swordi, 12.06.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    probier mal

    <service android:name ="com.paket2.ServiceClass"
    android:exported="true">
    <intent-filter>
    <action android:name="com.paket2.ServiceClass">
    </action>
    </intent-filter>
    </service>
     
  3. sem_thesis, 12.06.2011 #3
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Danke für deine Mühe!
    Ich bekomme jedoch immer noch die gleiche Fehlermeldung :(
     
  4. the_alien, 12.06.2011 #4
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    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.

     
  5. sem_thesis, 12.06.2011 #5
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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?
     
  6. swordi, 12.06.2011 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
    sem_thesis bedankt sich.
  7. sem_thesis, 12.06.2011 #7
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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 :(
     
    Zuletzt bearbeitet: 12.06.2011
  8. the_alien, 13.06.2011 #8
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Clean
     
    sem_thesis bedankt sich.
  9. sem_thesis, 13.06.2011 #9
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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: 13.06.2011
  10. swordi, 13.06.2011 #10
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    nur weil du 2 pakete gemacht hast, hast du nicht 2 prozesse.

    deine app wird innerhalb eines prozesses ausgeführt.
     
  11. sem_thesis, 13.06.2011 #11
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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.
     
  12. the_alien, 13.06.2011 #12
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    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...
     
  13. sem_thesis, 13.06.2011 #13
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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..
     
  14. swordi, 14.06.2011 #14
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
    the_alien bedankt sich.
  15. sem_thesis, 14.06.2011 #15
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Genauer?
    Ich muss überall try-catch Blöcke einbauen..und überlegen was für Exceptions existieren...?
     

Diese Seite empfehlen