【问题标题】:Using WallpaperManager in Android to set wallpaper在 Android 中使用 WallpaperManager 设置壁纸
【发布时间】:2012-08-14 13:29:45
【问题描述】:

以下是我的代码,我想使用壁纸管理器设置为壁纸。我正在使用Universal Image Loader,但我不知道如何实现壁纸管理器。我的 setWall() 不工作,有点混乱。

    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) {
        }
    }





}

【问题讨论】:

  • 我的问题是,您期待 setWall() 做什么?您将其 0 作为资源值,而不是实际的资源 ID。您还需要提供有关“不工作”的含义的信息——它会崩溃吗?你得到了意想不到的结果吗?如果它崩溃了,请查看 LogCat 并查看异常详细信息。如果您仍然不明白,请将 LogCat 中的日志编辑到您的问题中。
  • 我已经编辑了我的代码,这是我的 logcat。
  • 是的,那是什么R.id.imagepager 这不是解决方案。只需对任何R.drawable.someimageresource 执行此操作,只需在您的工作区中输入R.drawable. 并在使用Ctrl + spacebar 后显示您的图像。否则,请尝试使用 R.drawable.ic_launcherR.drawable.icon 的应用启动图标,这取决于您的 SDK。或者试试这个R.drawable.noimage
  • SPK,我的应用程序只是将我的应用程序图标图像设置为墙纸,这不是我想要的。我想将我选择的图像设置为墙纸。我正在为我的应用程序使用 viewpager。然后使用选项菜单将图像设置为壁纸

标签: android wallpaper


【解决方案1】:

你为什么不用myWallpaperManager.setResource(0);而不是myWallpapaerManager.setResource(R.drawable.yourimage)

看看Wallpapaer Manager example.希望对你有帮助。

【讨论】:

  • 谢谢,但我现在已经在使用该示例了。但我不知道如何实现它。我应该把什么放入(R.drawable.yourimage)?你能根据我的代码举个例子吗?
  • @user1598107 你在res/drawable-ldpi(或)res/drawable-mdpi(或)res/drawable/hdpi文件夹下没有任何图像。
【解决方案2】:

您应该将您的Drawable 转换为Bitmap,然后使用壁纸管理器的setBitmap() 功能来设置您想要的壁纸

将 Drawable 转换为位图

private Bitmap getBitmapFromDrawable(Drawable d){
         Bitmap bitmap = 
                 ((BitmapDrawable) d).getBitmap();
         return bitmap;
}

设为壁纸

public void setWall() { 
    WallpaperManager myWallpaperManager = 
         WallpaperManager.getInstance(getApplicationContext()); 
 try { 
    myWallpaperManager.setBitmap(getBitmapFromDrawable(R.drawable.app_icon); 
 } catch (IOException e) { 
    // TODO Auto-generated catch block e.printStackTrace(); 
 } 
} 

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多