2013-04-02 34 views
6

Sau nhiều giờ nghiên cứu, tôi cuối cùng đã tư vấn trợ giúp chính thức. Tại sao không onHandleIntent() được gọi? Có gì sai ở đây không?Phương pháp onHandleIntent() không được gọi là

Trong hoạt động chính onCreate():

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

Đó iss nó. Các onStartCommand() được gọi, nhưng không phải 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(); 
    } 
} 

Đây là bên trong 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

Và làm thế nào bạn đang gọi IntentService? –

+0

Bài bắt đầu đã chỉnh sửa :) – KickAss

Trả lời

11

Có thể phục vụ mục đích của bạn không được bắt đầu bởi vì bạn đang trọng onStartCommand() phương pháp như tài liệu android nói:

"Bạn không nên ghi đè phương thức này (onStartCommand()) cho IntentService của bạn. Thay vào đó, hãy ghi đè onHandleIntent(Intent), mà hệ thống gọi khi IntentService nhận được yêu cầu bắt đầu. "


Hope vì vậy đây sẽ giúp bạn

+0

Có điều đó đã được sửa, nhưng bây giờ tôi có một vấn đề mới. Tôi đang thay đổi hình nền trong nền bằng cách sử dụng mã trong EDIT 1 ở ​​trên. Các thay đổi hình nền như nó nên khi được gọi từ thread hoạt động chính, nhưng khi được sử dụng bên trong phương pháp onHandleIntent, hình nền thay đổi thành một màu ngẫu nhiên. – KickAss

+0

Nếu intentService đang thay đổi hình nền của bạn thành một số màu ngẫu nhiên thì vấn đề có thể xảy ra với bitmap. Gỡ lỗi và kiểm tra xem nó có đang tạo bitmap đúng hay không. –

+0

Xin chào. Tôi đã tạo một bài đăng mới cho vấn đề hình nền này để giữ cho nó sạch sẽ, vui lòng kiểm tra mã :) http://stackoverflow.com/questions/15756253/onhandleintent-wallpaper-change-not-working-correctly – KickAss

Các vấn đề liên quan