2013-09-30 26 views
23

Ho lo stesso problema descritto here ma non riesco a capire cosa c'è di sbagliato.Impossibile avviare il servizio Intenzione: non trovato

Il mio problema è: Impossibile avviare il servizio Intent {atto = .connections.MoodyService} U = 0: non trovato

EDIT ho cambiato il mio pacchetto da connessioni al servizio nel il codice sorgente, mi dispiace per la confusione

mio manifesto `

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

servizio è il pacchetto e MoodyService è il nome della classe

La mia classe di servizio

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(); 
     } 
    } 
} 

E nel mio principale.

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

e anche provato

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

e provato con il percorso completo

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

ancora c'è qualche errore howcome ur errore nel pacchetto 'atto = com.example.moody.connections.MoodyService' ma u stanno avendo "" com.example.moody.service.MoodyService "" come nome pacchetto –

+0

@ShakeebS ho cambiato per un nuovo pacchetto e ho dimenticato di aggiornare il post – firetrap

+0

questo è stato votato adesso dopo l'aggiornamento votato up.post corretto informazioni altrimenti le persone si confonderanno –

risposta

21

Risolto

ho cancellato il periodo all'inizio del nome del pacchetto nel manifesto e ha funzionato, nelle altre parole:

Questo non funziona:

.yourPackage.YourClass 

Ma questo funziona:

yourPackage.YourClass 

e nei principali:

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

ma va contro ciò che è scritto nel the documentation:

Android: nome Il nome della sottoclasse servizio che implementa il servizio. Questo dovrebbe essere un nome di classe completo (ad esempio, "com.example.project.RoomService"). Tuttavia, in forma abbreviata, se il primo carattere del nome è un punto (ad esempio, ".RoomService"), viene aggiunto al nome del pacchetto specificato nell'elemento . Una volta pubblicata la tua applicazione, non dovresti modificare questo nome (a meno che tu non abbia impostato android: exported = "false").

Non esiste un valore predefinito. Il nome deve essere specificato.

+1

Mi manca completamente, anche se è un errore da parte tua. Quando hai package = "com.example.moody" nella radice del tuo manifest e scrivi android: name = ". Service.MoodyService", il sistema cercherà un servizio chiamato "com.example.moody.service". MoodyService". Ma l'output in cima a q dice "com.example.moody.connections.MoodyService", quindi un errore di copia incolla a un certo momento, presumo. – cYrixmorten

+0

sì, era una vecchia copia per uno dei miei tentativi. – firetrap

+1

c'è ancora qualche errore nel tuo errore nel pacchetto 'act = com.example.moody.connections.MoodyService' ma stai avendo '" com.example.moody.service.MoodyService "'come nome del pacchetto –

0

hai creato un costruttore vuoto nel servizio?

In caso contrario, provare.

Anche incerto se è possibile utilizzare l'intenzione in questo modo. Potresti provare la nuova costruzione di Inten (this, MoodyService.class).

+0

Sì, ho anche provato: Intent intent = new Intent (this, MoodyService.class); this.startService (intento); Ho aggiornato la mia domanda con il codice di servizio – firetrap

3

Non so perché si sta usando il nome del pacchetto per il nome del servizio, ma perché non si usa il nome della classe per avviare il servizio?

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

Ho tentato di non avere lo stesso errore di differenza, cosa ho fatto: "Intent intent = new Intent (this, MoodyService.class); \t \t \t this.startService (intent); "e anche cambiato in un nuovo pacchetto ma lo stesso risultato, era solo lì perché quel pacchetto non è più utilizzato – firetrap

+0

Questo è il problema esatto che stavo avendo. AndroidManifest.xml andava bene, ma stavo passando l'intento ricevuto da onReceive() in BroadcastReceiver. – GrandAdmiral

1

Penso che in nome del pacchetto manifesta per il servizio è sbagliato come hai detto il tuo nome del pacchetto è connections quindi dovrebbe essere come questo servizio

android:name ="connections.MoodyService" 

o

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

invocare fare

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

Sì hai ragione, come ho detto nella mia risposta, ma i documenti dicono: "Tuttavia, come una stenografia, se il primo carattere del nome è un punto (per esempio, ".RoomService"), viene aggiunto al nome del pacchetto specificato nell'elemento "quindi ho il periodo perché il servizio è il pacchetto – firetrap

+0

' connection' è il nome del pacchetto o 'service' è il nome del pacchetto –

+0

che ho aggiornato la domanda, MoodyService.java era nel pacchetto - "connessioni", ora è nel pacchetto - "servizio", il mio errore non era il nome del pacchetto mi sono solo dimenticato di aggiornare la domanda – firetrap

-3

Hai provato a utilizzare l'androide: nome che hai specificato nel manifesto?

Android Manifest:

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

La chiamata sarebbe qc come questo:

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

Questo non funzionerebbe mai –

11

Il servizio deve essere anche essere incluso nel Manifesto:

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

Che dire se questo è nella directory androidTest? C'è bisogno di un Manifesto separato lì? –

0

mia il servizio è nel pacchetto "servizio" e il mio servizio manifest è così forte ;

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

Assicurarsi di aver dichiarato il proprio servizio nel file manifest.

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

e provare a scrivere getApplicationContext() al posto di "questa" parola chiave

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

Per cosa è abilitato? –

Problemi correlati