Någon som kört Service?

Discussion in 'Frågor, support och diskussion' started by mrmozart, Jul 17, 2010.

  1. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

    Jag sitter och försöker skapa min första Service, men får det inte att fungera. Någon som vet om jag kan ha ett projekt med båda en service och en aktivitet? Aktiviteten startas vid uppstart och startar tjänsten (startService).

    Problemet nu är att jag får:

    07-17 19:33:59.982: WARN/ActivityManager(59): Unable to start service Intent { cmp=se.xxx.android.autobackup/.MainService }: not found
     
  2. woody

    woody Teen Droid Medlem

    Joined:
    Sep 3, 2009
    Messages:
    319
    Likes Received:
    19

    MINA ENHETER

    Att ha både services och activities i samma projekt går absolut bra. Det är fullständigt normalt.
    Har du deklarerat servicen i AndroidManifest.xml
     
  3. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

    OK. Jo, den är deklarerad:

    Code:
    service android:name=".MainService" android:enabled="true"
    Min klass som ärver Service heter MainService och ligger i paketet se.xxx.android.autobackup
     
  4. woody

    woody Teen Droid Medlem

    Joined:
    Sep 3, 2009
    Messages:
    319
    Likes Received:
    19

    MINA ENHETER

    Är se.xxx.android.autobackup applikationens huvudbibliotek? Varför en punkt i namnet i deklarationen?
     
  5. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

    jupp, det är huvudbiblioteket. Punkten tog jag enligt diverse exempel på nätet och t.ex. boken "Professional Android Application Development". Det blir ingen skillnad om jag tar bort den.
     
  6. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

  7. woody

    woody Teen Droid Medlem

    Joined:
    Sep 3, 2009
    Messages:
    319
    Likes Received:
    19

    MINA ENHETER

    I AndroidManifest.xml: Ska inte service-elementet vara underelement till application?
     
  8. woody

    woody Teen Droid Medlem

    Joined:
    Sep 3, 2009
    Messages:
    319
    Likes Received:
    19

    MINA ENHETER

    Last edited: Jul 17, 2010
  9. ThePatrik

    ThePatrik Youth Droid Medlem

    Joined:
    Jun 3, 2010
    Messages:
    248
    Likes Received:
    28

    MINA ENHETER

    AndroidManifest.xml
    -------------------
    <applicaion>
    .
    .
    <service android:name=".MyRandomService"/>

    </application>


    MyRandomService.class
    -------------------------

    public class MyRandomService extends Service {

    private Timer timer = new Timer();
    private static final long UPDATE_INTERVAL = (60*1000)*5; // 5 minutes.

    @Override
    public void onStart( Intent intent, int startId ) {
    super.onStart( intent, startId );
    _startService();
    }

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

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

    }


    public void doStuff () {

    // Do your periodic Service stuff here...

    }


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

    private void _startService() {
    timer.scheduleAtFixedRate(
    new TimerTask() {
    public void run() {
    doStuff();

    }
    },
    0,
    UPDATE_INTERVAL);
    }

    private void _shutdownService() {
    if (timer != null) timer.cancel();
    }

    }


    Starta servicen från din Activity...
    --------------------------------------

    Intent svc = new Intent(this, MyRandomService.class);
    svc.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startService(svc);


    Stoppa servicen från din Activity
    -----------------------------------

    Intent svc = new Intent(this, MyRandomService.class);
    svc.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    stopService(svc);
     
  10. ThePatrik

    ThePatrik Youth Droid Medlem

    Joined:
    Jun 3, 2010
    Messages:
    248
    Likes Received:
    28

    MINA ENHETER

    AndroidManifest.xml
    -------------------
    .<applicaion>
    .
    .
    .<service android:name=".MyRandomService"/>
    .
    .
    .</application>

    MyRandomService.class
    -------------------------

    public class MyRandomService extends Service {

    private Timer timer = new Timer();
    private static final long UPDATE_INTERVAL = (60*1000)*5; // 5 minutes.

    @Override
    public void onStart( Intent intent, int startId ) {
    super.onStart( intent, startId );
    _startService();
    }

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

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

    }


    public void doStuff () {

    // Do your periodic Service stuff here...

    }


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

    private void _startService() {
    timer.scheduleAtFixedRate(
    new TimerTask() {
    public void run() {
    doStuff();

    }
    },
    0,
    UPDATE_INTERVAL);
    }

    private void _shutdownService() {
    if (timer != null) timer.cancel();
    }

    }


    Starta servicen från din Activity...
    --------------------------------------

    Intent svc = new Intent(this, MyRandomService.class);
    svc.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startService(svc);


    Stoppa servicen från din Activity
    -----------------------------------

    Intent svc = new Intent(this, MyRandomService.class);
    svc.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    stopService(svc);[/QUOTE]
     
  11. ThePatrik

    ThePatrik Youth Droid Medlem

    Joined:
    Jun 3, 2010
    Messages:
    248
    Likes Received:
    28

    MINA ENHETER

    AndroidManifest.xml
    -------------------
    Code:
    < applicaion >
    .
    .
    
          	< service android:name=".MyRandomService" / >
    .
    .
    
    < /application >
    
    MyRandomService.class
    -------------------------
    
    public class MyRandomService extends Service {
    
           private Timer timer = new Timer();
           private static final long UPDATE_INTERVAL = (60*1000)*5; // 5 minutes.
    
    	@Override
        public void onStart( Intent intent, int startId ) {
    	  super.onStart( intent, startId );
    	   _startService();
        }
    
        @Override
        public IBinder onBind( Intent intent ) {
            return null;
        }
    
        @Override
        public void onCreate() {
          super.onCreate();
    
        }
    
    
    public void doStuff () {
    
    // Do your periodic Service stuff here...
    
    }
    
    
        @Override
        public void onDestroy() {
    	  super.onDestroy();
              _shutdownService();
        }
    
       private void _startService() {
      timer.scheduleAtFixedRate(
          new TimerTask() {
            public void run() {
            	doStuff();
    
            }
          },
          0,
          UPDATE_INTERVAL);
    }
    
      private void _shutdownService() {
      if (timer != null) timer.cancel();
      }
    
    }
    
    
    Starta servicen från din Activity...
    --------------------------------------
    
    Intent svc = new Intent(this, MyRandomService.class);
    svc.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startService(svc);
    
    
    Stoppa servicen från din Activity
    -----------------------------------
    
    Intent svc = new Intent(this, MyRandomService.class);
    svc.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    stopService(svc);[/QUOTE]
     
  12. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

    Tack för hjälpen! Att jag missade det. Tyckte att jag kollat noga på exemplen, men måste ha sett fel. Nu ska vi se om jag får till det. Nästa steg är att tjänsten ska starta när telefonen startar.
     
  13. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

  14. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

    Ingen som vet om autostart-tjänster fungerar i emulatorn? Ingen som kan hjälpa mig att hitta felet i koden?
     
  15. Kaj

    Kaj Senior Droid Medlem

    Joined:
    Jun 12, 2009
    Messages:
    1 768
    Likes Received:
    44

    MINA ENHETER

    Jag har inte kollat på koden, men ja, det skall gå att testa autostart-tjänster i emulatorn.
     
  16. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

    OK, tack för svaret Kaj! Då vet jag att det inte är ett omöjligt problem iaf :)
     
  17. woody

    woody Teen Droid Medlem

    Joined:
    Sep 3, 2009
    Messages:
    319
    Likes Received:
    19

    MINA ENHETER

    Har inte heller kollat på koden.
    Börja med att kolla om problemet är att du inte får boot-intentet till din reciever eller om problemet är att servicen inte startar som den ska.
    Skriv något till loggen i onRecieve i din reciever samt i onStart i din service och kolla vad som skrivs när du startat emulatorn.
     
  18. Kaj

    Kaj Senior Droid Medlem

    Joined:
    Jun 12, 2009
    Messages:
    1 768
    Likes Received:
    44

    MINA ENHETER

    Nu är jag hemma och har tillgång till kod. I TravelMapper (som inte finns på market) lyssnar jag på boot:

    I AndroidManifest.xml

    HTML:
    		<receiver android:name=".BootListener" 
    				 android:enabled="true" 
    				 android:exported="false"
    				 android:label="BootListener">
    		    <intent-filter>
    		        <action android:name="android.intent.action.BOOT_COMPLETED" />
    		    </intent-filter>
    		</receiver>
    
    Och min tjänst som lyssnar på boot:

    Code:
    public class BootListener extends BroadcastReceiver {
    
    	private static final String TAG = "f1.tr.BootListener";
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()) == false) {
    			return;
    		}
    		
    		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    		Editor editor = prefs.edit();
    		editor.putString(Prefs.NEXT_EXECUTION, " - ");
    		editor.commit();
    		
    		if (prefs.getBoolean(Prefs.START_SERVICE_ON_BOOT, false) == false) {
    			Log.i(TAG, "Won't start service, disabled in preferences");
    			return;
    		}
    		
    		Log.i(TAG, "Starting update service");
    		
            	if (UpdateService.startService(context) == null) {
            		Log.e(TAG, "Couldn't start udpate service");
            	}
    	}
    }	
    
     
  19. mrmozart

    mrmozart Teen Droid Medlem

    Joined:
    Jul 9, 2009
    Messages:
    279
    Likes Received:
    1

    MINA ENHETER

    Nu har jag tittat lite mer på det. Tack för era tips! Inget verkade hjälpa, men så körde jag clean på projektet och vips så fångades uppstarten av telefonen.

    Däremot startade inte min tjänst. Något fel på raden som startar (den fungerar om jag startar från aktiviteten)?

    context.startService(new Intent(context,MainService.class));

    När jag nu startar om emulatorn fångas dock ingen uppstart... känns som emulatorn inte är världens mest stabila miljö... Clean hjälpte igen.