2010-12-31 14 views
8

vedo il seguente errore nel DDMS quando si tenta di utilizzare una casella di controllo il mio MyActivity" l'attività per avviare un servizio chiamato 'MyService':"Impossibile avviare il servizio intenti" l'errore quando si avvia il servizio da un'attività in Android

W/ActivityManager( 73): Unable to start service Intent { cmp=com.example.android.myprogram/.MyService }: not found 

ho usato il tutorial http://developer.android.com/resources/tutorials/views/hello-formstuff.html e ha aggiunto il codice fornito al termine del mio metodo onCreate(). ho le classi indicate separatamente in MyActivity.java e MyService.java.

package com.example.android.myprogram; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.CheckBox; 


public class MyActivity extends Activity { 
    private static final String TAG = "MyActivity"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final CheckBox checkbox = (CheckBox) findViewById(R.id.checkbox); 
     checkbox.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on clicks, depending on whether it's now checked 
       if (((CheckBox) v).isChecked()) { 
        // TODO: Add code to START the service 
        Log.d(TAG, "startService from checkbox");  
        startService(new Intent(MyActivity.this, MyService.class)); 
       } else { 
        // TODO: Add code to STOP the service 
        Log.d(TAG, "stopService from checkbox");  
        stopService(new Intent(MyActivity.this, MyService.class)); 
       } 
      } 
     }); 
    } 
} 

mio file manifesto ha il seguente in cui ho anche provato il pieno namespace, nome breve, utilizzo di un filtro intent per un'altra ricerca, ecc. Non sto dicendo che cosa è corretto. L'ho appena lasciato a un punto di sosta.

<service android:name=".MyService"> 
    <intent-filter><action android:name="com.example.android.myprogram.MyService"></action> 
    </intent-filter> 
</service> 

E, infine, il servizio che ho deciso di abbattere al suo minimo indispensabile:

package com.example.android.myprogram; 


import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 

public class MyService extends Service { 
    private static final String TAG = "MyService"; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     Log.d(TAG, "onCreate"); 
     //code to execute when the service is first created 
    } 

    @Override 
    public void onDestroy() { 
     Log.d(TAG, "onDestroy"); 
     //code to execute when the service is shutting down 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     Log.d(TAG, "onStart"); 
     //code to execute when the service is starting up 
    } 
} 

Sono molto, molto, molto nuovo per Java/programmazione Android e programmazione in generale (ma imparando) quindi sono sicuro che si tratta di un errore dell'utente e probabilmente del buon senso per tutti gli altri. Qualsiasi suggerimento sarebbe molto apprezzato.

+0

Potrebbe incollare il codice del servizio? – Cristian

+0

Cristian, grazie per la risposta. Il codice è stato aggiunto. Domanda: dovrei essere in grado di usarlo e ottenere un risultato positivo? http://android.kgmoney.net/2010/05/08/creating-a-simple-android-service-for-background-processing/. Neanche funziona. – capitalf

risposta

17

Ho continuato a scavare e, come ho immaginato, stavo facendo un evidente errore da principiante. In AndroidManifest.xml, ho ricevuto la dichiarazione del servizio> < dopo l'applicazione < anziché nidificata al suo interno.

+0

che mi danno un errore. – BlaShadow

+0

Ovviamente mi hai salvato così tanto tempo oggi. Grazie. – Dam

0

Non è necessario scrivere il filtro di intent perché si sta avviando il servizio in modo esplicito. Se sei nuovo su Android, usa il seguente link per aiutarti. Ha anche un esempio di servizio. http://saigeethamn.blogspot.com/2009/08/android-developers-tutorial-for.html

+0

Grazie per la risposta. In realtà ho già rimosso quella linea dal post originale dopo aver ricordato che è solo per le applicazioni di terze parti a utilizzare il mio servizio. Sfortunatamente, ricevo ancora l'errore. – capitalf

0

ripulire la riga nel manifest.xml

 <intent-filter> 
      <action android:name="com.example.android.myprogram.MyService"> 
      </action> 
     </intent-filter> 
Problemi correlati