在Android中使用WallpaperManager设置壁纸 [英] Using WallpaperManager in Android to set wallpaper

查看:509
本文介绍了在Android中使用WallpaperManager设置壁纸的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的codeS,我想用壁纸经理设置为墙纸。我使用通用图像装载机,但我不知道如何实现墙纸经理。我setWall()不工作,有点扑朔迷离。

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

    进口com.nostra13.universalimageloader.core.DisplayImageOptions;
    进口com.nostra13.universalimageloader.core.assist.FailReason;
    进口com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
    进口com.nostra13.universalimageloader.core.assist.ImageScaleType;


    公共类ImageActivity扩展BaseActivity {

        私人DisplayImageOptions imageoptions;

        私人ViewPager imagepager;

        公共无效的onCreate(包savedInstanceState){
            super.onCreate(savedInstanceState);

            的setContentView(R.layout.imagepager);


            束束= getIntent()getExtras()。
            的String [] imageUrls = bundle.getStringArray(Extra.IMAGES);
            INT pagerPosition = bundle.getInt(Extra.IMAGE_POSITION,0);
            imageoptions =新DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.noimage)
                .cacheOnDisc()
                .imageScaleType(ImageScaleType.EXACT)
                。建立();

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


 公共无效setWall(){

    WallpaperManager myWallpaperManager
     = WallpaperManager.getInstance(getApplicationContext());
    尝试 {
     myWallpaperManager.setResource(R.drawable.app_icon); //<  - 我的应用程序只是把我的应用程序图标的图像作为背景,这不是我想要的。我想我的设置选择图片作为壁纸
    }赶上(IOException异常E){
     // TODO自动生成的catch块
     e.printStackTrace();
    }

}

@覆盖
    公共布尔onCreateOptionsMenu(功能菜单){
        。getMenuInflater()膨胀(R.menu.main_menu,菜单);
        返回true;
    }

    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        开关(item.getItemId()){
            案例R.id.setWall:
                setWall();
                返回true;
            默认:
                返回false;
        }
    }

@覆盖
    保护无效的onStop(){
        imageLoader.stop();
        super.onStop();
    }

    私有类ImagePagerAdapter扩展PagerAdapter {

        私有String []的图像;
        私人LayoutInflater充气;

        ImagePagerAdapter(字符串[]的图像){
            this.images =图像;
            充气= getLayoutInflater();
        }

        @覆盖
        公共无效destroyItem(View容器,INT位置,Object对象){
            ((ViewPager)容器).removeView((查看)对象);
        }

        @覆盖
        公共无效finishUpdate(View容器){
        }

        @覆盖
        公众诠释getCount将(){
            返回images.length;
        }

        @覆盖
        公共对象instantiateItem(查看视图,INT位置){
            最后查看imageLayout = inflater.inflate(R.layout.item_pager_image,NULL);
            最后的ImageView ImageView的=(ImageView的)imageLayout.findViewById(R.id.image);
            最终进度微调=(进度)imageLayout.findViewById(R.id.loading);

            imageLoader.displayImage(图片[位置],ImageView的,imageoptions,新ImageLoadingListener(){
                公共无效onLoadingStarted(){
                    spinner.setVisibility(View.VISIBLE);
                }

                公共无效onLoadingFailed(FailReason failReason){
                    字符串消息= NULL;
                    开关(failReason){
                        案例IO_ERROR:
                            消息=输入/输出错误;
                            打破;
                        案例OUT_OF_MEMORY:
                            消息=内存不足错误;
                            打破;
                        案例未知:
                            消息=未知错误;
                            打破;
                    }
                    Toast.makeText(ImagePagerActivity.this,消息,Toast.LENGTH_SHORT).show();

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

                公共无效onLoadingComplete(位图loadedImage){
                    spinner.setVisibility(View.GONE);
                    动画动画= AnimationUtils.loadAnimation(ImagePagerActivity.this,R.anim.fade_in);
                    imageView.setAnimation(动画);
                    anim.start();
                }

                公共无效onLoadingCancelled(){
                    // 没做什么
                }
            });

            ((ViewPager)视图).addView(imageLayout,0);
            返回imageLayout;
        }

        @覆盖
        公共布尔isViewFromObject(查看视图,Object对象){
            返回view.equals(对象);
        }

        @覆盖
        公共无效restoreState(Parcelable状态,类加载器加载器){
        }

        @覆盖
        公共Parcelable saveState和(){
            返回null;
        }

        @覆盖
        公共无效startUpdate(View容器){
        }
    }





}
 

解决方案

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

看一看 Wallpapaer经理的例子。希望这有助于你不少。

Below are my codes, I want to use wallpaper manager to set as wallpaper. I'm using Universal Image Loader, but i dont know how implement wallpaper manager. My setWall() is not working, kinda confusing.

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





}

解决方案

Instead of myWallpaperManager.setResource(0); Why didn't you use the myWallpapaerManager.setResource(R.drawable.yourimage)

Have a look at Wallpapaer Manager example. Hope this helps you lot.

这篇关于在Android中使用WallpaperManager设置壁纸的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆