Android 从本地设备的路径中,获取要设置为墙纸的图像

Android 从本地设备的路径中,获取要设置为墙纸的图像,android,storage,wallpaper,Android,Storage,Wallpaper,我有从图像库中以字符串格式拾取的墙纸路径。 现在,从这个路径,我想从图库或本地存储中获取可绘制的图像或位图,并将其设置为壁纸 我所做的是: if (!wallpaperPath.equals("") && wallpaperPath.length() > 0) { Bitmap b = BitmapFactory.decodeFile(wallpaperPath); WallpaperManag

我有从图像库中以字符串格式拾取的墙纸路径。 现在,从这个路径,我想从图库或本地存储中获取可绘制的图像或位图,并将其设置为壁纸

我所做的是:

if (!wallpaperPath.equals("") && wallpaperPath.length() > 0) {
                    Bitmap b = BitmapFactory.decodeFile(wallpaperPath);
                    WallpaperManager wallpaperManager = (WallpaperManager.getInstance(ScrollingActivity.this));
                    try {
                        wallpaperManager.setBitmap(b);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
但这给了我错误

 java.lang.RuntimeException: Error receiving broadcast Intent { act=WIFICHANGE flg=0x10 (has extras) } in delusions.com.myapplication.ScrollingActivity$2@4e59142
                                                                           at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:874)
                                                                           at android.os.Handler.handleCallback(Handler.java:739)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:135)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5253)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at java.lang.reflect.Method.invoke(Method.java:372)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695)
                                                                        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
                                                                           at android.app.WallpaperManager.setWallpaper(WallpaperManager.java:1524)
                                                                           at android.app.WallpaperManager.setBitmap(WallpaperManager.java:1278)
                                                                           at android.app.WallpaperManager.setBitmap(WallpaperManager.java:1207)
                                                                           at delusions.com.myapplication.ScrollingActivity$2.onReceive(ScrollingActivity.java:132)
                                                                           at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:864)
                                                                           at android.os.Handler.handleCallback(Handler.java:739) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                           at android.os.Looper.loop(Looper.java:135) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5253) 
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695) 
                }
正确的方法应该是什么

获取墙纸的代码:

   case R.id.btn_wallpaper:
            Intent imageIntent = new Intent(Intent.ACTION_GET_CONTENT);
            imageIntent.setType("image/*");
            Intent chooser = Intent.createChooser(imageIntent,"Select New Wallpaper");
            startActivityForResult(chooser,RESULT_WALLPAPER);
            break;      
在onActivityResult()中


我只从stackoverflow找到了我问题的答案,但我错过了我找到的链接

 if(data!=null) {
                Bundle bundle = data.getExtras();
                final Uri wallpaperURI = data.getData();

                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            Bitmap imagedata = null;//(Bitmap) data.getExtras().get("dat");
                            try {
                                imagedata = MediaStore.Images.Media.getBitmap(getContentResolver(), wallpaperURI);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            ByteArrayOutputStream baos = new ByteArrayOutputStream();
                            if(imagedata!=null)
                                imagedata.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                            byte[] imageBytes = baos.toByteArray();

                           String  encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);

                            Prefs.writeString(ScrollingActivity.this,Defines.IMAGE_DATA, encodedImage);
                            //tv_Ringtone.setText(encodedImage);

                        }
                    }).start();
                String wallpaperPath = wallpaperURI.getPath();
                System.out.println("Wallpaper path  encoded:  "+ wallpaperURI.getEncodedPath());
                System.out.println("Wallpaper path : " + wallpaperPath);
                Prefs.writeString(this, Defines.WALLPAPER_PATH, wallpaperPath);
                iv_newWallpaper.setImageURI(wallpaperURI);
设置墙纸是很重要的

 String previouslyEncodedImage = Prefs.readString(ScrollingActivity.this,Defines.IMAGE_DATA);

                if( !previouslyEncodedImage.equalsIgnoreCase("") ){
                    byte[] b = Base64.decode(previouslyEncodedImage, Base64.DEFAULT);
                    Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
                    WallpaperManager wallpaperManager = (WallpaperManager.getInstance(ScrollingActivity.this));
                    try {
                        wallpaperManager.setBitmap(bitmap);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

我只从stackoverflow找到了我问题的答案,但我错过了我找到的链接

 if(data!=null) {
                Bundle bundle = data.getExtras();
                final Uri wallpaperURI = data.getData();

                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            Bitmap imagedata = null;//(Bitmap) data.getExtras().get("dat");
                            try {
                                imagedata = MediaStore.Images.Media.getBitmap(getContentResolver(), wallpaperURI);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            ByteArrayOutputStream baos = new ByteArrayOutputStream();
                            if(imagedata!=null)
                                imagedata.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                            byte[] imageBytes = baos.toByteArray();

                           String  encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);

                            Prefs.writeString(ScrollingActivity.this,Defines.IMAGE_DATA, encodedImage);
                            //tv_Ringtone.setText(encodedImage);

                        }
                    }).start();
                String wallpaperPath = wallpaperURI.getPath();
                System.out.println("Wallpaper path  encoded:  "+ wallpaperURI.getEncodedPath());
                System.out.println("Wallpaper path : " + wallpaperPath);
                Prefs.writeString(this, Defines.WALLPAPER_PATH, wallpaperPath);
                iv_newWallpaper.setImageURI(wallpaperURI);
设置墙纸是很重要的

 String previouslyEncodedImage = Prefs.readString(ScrollingActivity.this,Defines.IMAGE_DATA);

                if( !previouslyEncodedImage.equalsIgnoreCase("") ){
                    byte[] b = Base64.decode(previouslyEncodedImage, Base64.DEFAULT);
                    Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
                    WallpaperManager wallpaperManager = (WallpaperManager.getInstance(ScrollingActivity.this));
                    try {
                        wallpaperManager.setBitmap(bitmap);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

添加此活动/片段的完整代码所选墙纸的路径为/document/image:9418请添加所选图像的代码,并在您尝试过的imageview中设置所选图像HY Base64.encodeToString?您到底想对所选图像执行什么操作???我实际上想将其保存给以后的用户添加此活动/碎片的完整代码所选墙纸的路径是/document/image:9418请为所选图像添加代码,并在您尝试过的imageview中设置所选图像HY Base64.encodeToString?你到底想对所选图像做什么???我实际上想把它保存下来,供以后的用户使用