2012-08-14 209 views
3

下面是我的代碼,我想使用壁紙管理器設置爲壁紙。我正在使用Universal Image Loader,但我不知道如何實現牆紙管理器。我的setWall()不工作,有點混亂。在Android中使用WallpaperManager設置壁紙

import android.graphics.Bitmap; 
    import android.os.Bundle; 
    import android.os.Parcelable; 
    import android.support.v4.view.PagerAdapter; 
    import android.support.v4.view.ViewPager; 
    import android.view.LayoutInflater; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.animation.Animation; 
    import android.view.animation.AnimationUtils; 
    import android.widget.ImageView; 
    import android.widget.ProgressBar; 
    import android.widget.Toast; 

    import com.nostra13.universalimageloader.core.DisplayImageOptions; 
    import com.nostra13.universalimageloader.core.assist.FailReason; 
    import com.nostra13.universalimageloader.core.assist.ImageLoadingListener; 
    import com.nostra13.universalimageloader.core.assist.ImageScaleType; 


    public class ImageActivity extends BaseActivity { 

     private DisplayImageOptions imageoptions; 

     private ViewPager imagepager; 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.imagepager); 


      Bundle bundle = getIntent().getExtras(); 
      String[] imageUrls = bundle.getStringArray(Extra.IMAGES); 
      int pagerPosition = bundle.getInt(Extra.IMAGE_POSITION, 0); 
      imageoptions = new DisplayImageOptions.Builder() 
       .showImageForEmptyUri(R.drawable.noimage) 
       .cacheOnDisc() 
       .imageScaleType(ImageScaleType.EXACT) 
       .build(); 

      imagepager= (ViewPager) findViewById(R.id.imagepager); 
      imagepager.setAdapter(new ImagePagerAdapter(imageUrls)); 
      imagepager.setCurrentItem(pagerPosition); 
     } 


public void setWall() { 

    WallpaperManager myWallpaperManager 
    = WallpaperManager.getInstance(getApplicationContext()); 
    try { 
    myWallpaperManager.setResource(R.drawable.app_icon); //<--My app just set my app icon image as wallpaper, this is not I wanted. I wanted to set my selected image as wallpaper 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

} 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.setWall: 
       setWall(); 
       return true; 
      default: 
       return false; 
     } 
    } 

@Override 
    protected void onStop() { 
     imageLoader.stop(); 
     super.onStop(); 
    } 

    private class ImagePagerAdapter extends PagerAdapter { 

     private String[] images; 
     private LayoutInflater inflater; 

     ImagePagerAdapter(String[] images) { 
      this.images = images; 
      inflater = getLayoutInflater(); 
     } 

     @Override 
     public void destroyItem(View container, int position, Object object) { 
      ((ViewPager) container).removeView((View) object); 
     } 

     @Override 
     public void finishUpdate(View container) { 
     } 

     @Override 
     public int getCount() { 
      return images.length; 
     } 

     @Override 
     public Object instantiateItem(View view, int position) { 
      final View imageLayout = inflater.inflate(R.layout.item_pager_image, null); 
      final ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image); 
      final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading); 

      imageLoader.displayImage(images[position], imageView, imageoptions, new ImageLoadingListener() { 
       public void onLoadingStarted() { 
        spinner.setVisibility(View.VISIBLE); 
       } 

       public void onLoadingFailed(FailReason failReason) { 
        String message = null; 
        switch (failReason) { 
         case IO_ERROR: 
          message = "Input/Output error"; 
          break; 
         case OUT_OF_MEMORY: 
          message = "Out Of Memory error"; 
          break; 
         case UNKNOWN: 
          message = "Unknown error"; 
          break; 
        } 
        Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show(); 

        spinner.setVisibility(View.GONE); 
        imageView.setImageResource(android.R.drawable.ic_delete); 
       } 

       public void onLoadingComplete(Bitmap loadedImage) { 
        spinner.setVisibility(View.GONE); 
        Animation anim = AnimationUtils.loadAnimation(ImagePagerActivity.this, R.anim.fade_in); 
        imageView.setAnimation(anim); 
        anim.start(); 
       } 

       public void onLoadingCancelled() { 
        // Do nothing 
       } 
      }); 

      ((ViewPager) view).addView(imageLayout, 0); 
      return imageLayout; 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view.equals(object); 
     } 

     @Override 
     public void restoreState(Parcelable state, ClassLoader loader) { 
     } 

     @Override 
     public Parcelable saveState() { 
      return null; 
     } 

     @Override 
     public void startUpdate(View container) { 
     } 
    } 





} 
+0

我對你的問題是,你期望*'setWall()'做什麼?您將「0」作爲資源值,而不是實際的資源ID。您還需要提供有關「不工作」是什麼意思的信息 - 是否崩潰?你是否得到意想不到的結果?如果發生崩潰,請查看LogCat並查看異常詳情。如果您仍然不明白,請將LogCat中的日誌編輯爲您的問題。 – kcoppock 2012-08-14 13:35:44

+0

我編輯了我的代碼,這裏是我的logcat。 – 2012-08-14 13:54:36

+0

是的,那是什麼'R.id.imagepager'這不是一個解決方案。只要用任何'R.drawable.someimageresource'來做到這一點,爲此,只需鍵入您的工作空間,如'R.drawable.',並在使用'Ctrl +空格鍵'後顯示您的圖像。否則,用'R.drawable.ic_launcher'或'R.drawable.icon'嘗試應用程序啓動圖標取決於你的SDK。或者只是嘗試這個'R.drawable.noimage' – Praveenkumar 2012-08-14 14:00:04

回答

5

而不是myWallpaperManager.setResource(0);你爲什麼不使用myWallpapaerManager.setResource(R.drawable.yourimage)

看一看Wallpapaer Manager example.希望這可以幫助你很多。

+0

謝謝,但我現在已經在使用該示例。但我不知道如何實現它。我應該把什麼(R.drawable.yourimage)?你能根據我的代碼顯示一個例子嗎? – 2012-08-14 13:37:44

+0

@ user1598107文件夾'res/drawable-ldpi'(或)'res/drawable-mdpi'(或)'res/drawable/hdpi'下沒有任何圖像使用任何來自那裏的文件。 – Praveenkumar 2012-08-14 13:39:44

+0

我剛編輯我的代碼SPK。一探究竟。 – 2012-08-14 13:55:42