2012-08-14 205 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