2013-04-02 23 views
6

Po wielu godzinach poszukiwań w końcu konsultuję się z oficjalną pomocą. Dlaczego nie można wywołać onHandleIntent()? Czy coś tu jest nie tak?Metoda onHandleIntent() nie jest wywoływana

W główny onCreate():

mService = new Intent(context, xyz.class); 
startService(mService); 

To ISS niego. onStartCommand() jest wywoływana, ale nie onHandleIntent()

package com.autoalbumwallaperplus; 

import android.app.IntentService; 
import android.content.Intent; 
import android.widget.Toast; 

public class xyz extends IntentService { 
    public xyz() { 
     super("bmp"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(this,"onStartCommand works!", Toast.LENGTH_SHORT).show(); 
     return super.onStartCommand(intent,flags,startId); 
    } 

    @Override 
    protected void onHandleIntent(Intent workIntent) { 
     Toast.makeText(this,"onHandleIntent works!", Toast.LENGTH_SHORT).show(); 
    } 
} 

Jest wewnątrz OnHandleIntent

String imagepath = workIntent.getStringExtra("String"); 
    Toast.makeText(this, "it works" , Toast.LENGTH_SHORT).show(); 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    WindowManager hi = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)); 
    int height = displayMetrics.heightPixels; 
    int width = displayMetrics.widthPixels << 2; 

    // ... First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    Bitmap decodedSampleBitmap = BitmapFactory.decodeFile(imagepath, options); 

    // ... Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize(options, width, height); 

    // ... Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    decodedSampleBitmap = BitmapFactory.decodeFile(imagepath, options); 

    // ... Set Wallpaper 
    //Context context = getApplicationContext(); 
    WallpaperManager wm = WallpaperManager.getInstance(this); 

    try { 
     wm.setBitmap(decodedSampleBitmap); 
    } catch (IOException e) { 
    } 
+0

i jak dzwonisz IntentService? –

+0

Edycja wpisu początkowego :) – KickAss

Odpowiedz

11

Może być usługa intencją nie zaczyna, bo są nadrzędne onStartCommand() metodę jako android dokumentacji mówi:

"Nie należy zastępować tej metody (onStartCommand()) dla swojej IntentService . Zamiast tego należy zastąpić onHandleIntent(Intent), który system wywołuje, gdy IntentService otrzyma żądanie uruchomienia. "


nadzieję, że pomoże Ci

+0

Tak, naprawiłem to, ale teraz mam nowy problem. Zmieniam tapetę w tle za pomocą kodu w EDIT 1 powyżej. Tapeta zmienia się tak, jak powinna, po wywołaniu z głównego wątku aktywności, ale gdy jest używana w metodzie onHandleIntent, tapeta zmienia się w losowy stały kolor. – KickAss

+0

Jeśli intentService zmienia tapetę na losowy jednolity kolor, problem może dotyczyć bitmapy. Debuguj i sprawdź, czy generuje odpowiednią bitmapę, czy nie. –

+0

Witam. Zrobiłem nowy wpis dotyczący tego problemu z tapetami, aby zachować czystość. Sprawdź kod :) http://stackoverflow.com/questions/15756253/onhandleintent-wallpaper-change-not-working-correct – KickAss

Powiązane problemy