2013-09-30 18 views
23

Mam ten sam problem opisany here, ale nie mogę zrozumieć, co jest nie tak.Nie można uruchomić usługi Zamiana: nie znaleziono

Mój problem jest: Nie można uruchomić usługi Intent {act = .connections.MoodyService} U = 0: Nie znaleziono

EDIT zmieniłem moją paczkę z połączeniami do służby w Kod źródłowy, przepraszam za zamieszanie

Mój manifest `

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.moody" 
android:installLocation="auto" 
android:versionCode="0" 
android:versionName="0.6.7 alpha" > 

<uses-sdk 
    android:maxSdkVersion="18" 
    android:minSdkVersion="14" 
    android:targetSdkVersion="17" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<application 
    android:allowBackup="true" 
    android:allowClearUserData="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="activities.MainActivity" 
     android:label="@string/app_name" > 
    </activity> 
    <activity 
     android:name="activities.Menu_esq" 
     android:label="@string/title_activity_menu_esq" > 
    </activity> 
    <activity 
     android:name="activities.BaseActivity" 
     android:label="@string/title_activity_base" > 
    </activity> 
    <activity 
     android:name="activities.MainView" 
     android:label="@string/title_activity_main_view" > 
    </activity> 
    <activity 
     android:name="activities.LoginActivity" 
     android:label="@string/app_name" 
     android:noHistory="true" 
     android:windowSoftInputMode="adjustResize|stateVisible" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.moody.LeftActivity" 
     android:label="@string/title_activity_left" > 
    </activity> 
    <activity 
     android:name="com.example.moody.RightActivity" 
     android:label="@string/title_activity_right" > 
    </activity> 
    <activity 
     android:name="activities.UserDetailsActivity" 
     android:label="@string/title_activity_user_details" > 
    </activity> 
    <activity 
     android:name="fragments.TopicsPreview" 
     android:label="@string/title_activity_copy_of_topics_preview" > 
    </activity> 
    <activity android:name="activities.Loading" > 
    </activity> 

    <service 
     android:name=".service.MoodyService" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/moody_service" > 
    </service> 
</application> 

usługa jest pakiet i MoodyService to nazwa klasy

Moja klasa usługa

public class MoodyService extends Service { 

public MoodyService() { 
    // TODO Auto-generated constructor stub 
} 

private boolean isRunning = false; 
Object getContent; 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 

    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 

    // Announcement about starting 
    Toast.makeText(this, "Starting the Demo Service", Toast.LENGTH_SHORT) 
      .show(); 

    // Start a Background thread 
    isRunning = true; 
    Thread backgroundThread = new Thread(new BackgroundThread()); 
    backgroundThread.start(); 

    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 

    // Stop the Background thread 
    isRunning = false; 

    // Announcement about stopping 
    Toast.makeText(this, "Stopping the Demo Service", Toast.LENGTH_SHORT) 
      .show(); 
} 

private class BackgroundThread implements Runnable { 
    int counter = 0; 

    public void run() { 
     try { 
      counter = 0; 
      while (isRunning) { 
       System.out.println("" + counter++); 
       new Contents().getAll(getResources(), 
         getApplicationContext()); 
       Thread.currentThread().sleep(5000); 
      } 

      System.out.println("Background Thread is finished........."); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

i moim głównym.

Intent start = new Intent(".service.MoodyService"); 
     this.startService(start); 

a także próbował

Intent intent = new Intent(this, MoodyService.class); 
     this.startService(intent); 

i starał się z pełną ścieżką

<service 
    android:name="com.example.moody.service.MoodyService" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/moody_service" > 
+0

nadal istnieje jakiś błąd Jak to możliwe ur błąd w pakiet 'act = com.example.moody.connections.MoodyService' ale u mam '" com.example.moody.service.MoodyService "'jako nazwę pakietu –

+0

@ShakeebS Zmieniono na nowy pakiet i zapomniałem zaktualizować wpis – firetrap

+0

, który został odrzucony teraz po aktualizacji głosowałem w górę. info inaczej ludzie będą zdezorientowani –

Odpowiedz

21

rozwiązać

Usunąłem okres na początku nazwy pakietu w manifeście i pracował w innym słowy:

To nie działa:

.yourPackage.YourClass 

Ale to działa:

yourPackage.YourClass 

A w głównym:

Intent intent = new Intent(this, MoodyService.class); 
     this.startService(intent); 

Ale to idzie przeciwko temu, co jest napisane w the documentation:

android: name nazwa podklasy usług, które realizuje usługi. Powinna to być pełna nazwa klasy (np. "com.example.project.RoomService"). Jednak jako skrót, jeśli pierwszym znakiem nazwy jest kropka (na przykład ".RoomService"), , jest ona dołączana do nazwy pakietu określonej w elemencie . Po opublikowaniu aplikacji nie należy jej zmieniać (chyba że ustawiono android: exported = "false").

Brak wartości domyślnej. Należy podać nazwę.

+1

Tęskniłem za tym, chociaż jest to błąd z twojej strony. Kiedy masz pakiet = "com.example.moody" w katalogu głównym manifestu i piszesz android: name = ". Service.MoodyService", wtedy system będzie szukał usługi o nazwie "com.example.moody.service. MoodyService ". Ale twoje dane wyjściowe na górze q mówią "com.example.moody.connections.MoodyService", stąd błąd kopiowania wkleić w pewnym momencie, przypuszczam. – cYrixmorten

+0

Tak, to był stary egzemplarz dla jednej z moich prób. – firetrap

+1

nadal istnieje błąd dotyczący błędu ur w pakiecie 'act = com.example.moody.connections.MoodyService', ale masz '" com.example.moody.service.MoodyService "'jako nazwę pakietu –

0

Czy utworzyć pusty konstruktor w służbie?

Jeśli nie, spróbuj tego.

Również niepewne, czy można użyć takiego zamiaru. Możesz wypróbować nową konstrukcję Inten (this, MoodyService.class).

+0

Tak, zrobiłem, a także wypróbowałem: Intent intent = new Intent (this, MoodyService.class); this.startService (zamiar); zaktualizowałem moje pytanie z kodem serwisowym – firetrap

3

Nie wiem, dlaczego używasz podobnej do pakietu nazwy nazwy usługi, ale dlaczego nie używasz nazwy klasy do uruchamiania usługi?

Intent intent = new Intent(context, YourService.class); 
context.startService(intent); 
+0

Próbowałem, że nie ma różnicy tego samego błędu, co zrobiłem: "Intent intent = new Intent (this, MoodyService.class); \t \t \t this.startService (zamiar); "i również zmieniono na nowy pakiet, ale ten sam wynik, tylko tam, ponieważ ten pakiet nie jest już używany – firetrap

+0

To jest dokładnie ten problem, który miałem. AndroidManifest.xml był w porządku, ale przechodziłem do zamiaru otrzymanego przez onReceive() w BroadcastReceiver. – GrandAdmiral

1

myślę w oczywistej nazwie pakietu do służby jest nie tak jak pan powiedział swoje imię pakiet jest connections tak powinno być jak ten

android:name ="connections.MoodyService" 

lub

android:name="com.example.moody.connections.MoodyService" 

powołać służby zrobić

Intent intent = new Intent(this, MoodyService.class); 
    this.startService(intent); 
+0

Tak, masz rację, jak wspomniałem w mojej własnej odpowiedzi, ale docs powiedzieć: "Jednak jako skrót, jeśli pierwszy znak nazwy jest kropka (dla przykład, ".RoomService"), jest dołączany do nazwy pakietu określonej w elemencie "więc mam okres, ponieważ usługa jest pakietem – firetrap

+0

' connection' to nazwa pakietu lub 'service' to nazwa pakietu –

+0

zaktualizowałem pytanie, MoodyService.java było w pakiecie - "połączenia", teraz jest w pakiecie - "usługa", mój błąd nie był nazwą pakietu, tylko zapomniałem zaktualizować pytanie – firetrap

-3

Czy próbowałeś użyć androida: nazwy określonej w Manifeście?

Android Oczywisty:

<service 
      android:enabled="true" 
      android:name="UploadService" /> 

Wezwanie byłoby czegoś takiego:

Intent intent = new Intent("UploadService"); 
+0

To nigdy nie zadziałałoby –

11

Usługa musi być również zawarte w Manifest:

<service android:name="com.x.x.serviceclass"></service> 
+1

Co jeśli to jest w katalogu androidTest? Czy istnieje tam osobny manifest? –

0

mój usługa znajduje się w pakiecie "service", a moja usługa jawna jest taka, jak ta ;

 <service 
     android:name="service.TimerService" 
     android:exported="false" > 
    </service> 
1

Upewnij się, że zadeklarowałeś swoją usługę w pliku manifestu.

<service 
     android:name=".MyService" 
     android:enabled="true" > 
</service> 

i spróbować napisać getApplicationContext() zamiast "to" słowo kluczowe

startService(new Intent(getApplicationContext(), MoodyService.class)); 
+0

Do czego służy opcja "włączone"? –

Powiązane problemy