2016-12-06 5 views
1

이미지 갤러리에서 선택한 경로가 문자열 형식입니다. 이제 그 경로에서 갤러리 또는 로컬 저장소에서 이미지 드로어 블 또는 비트 맵을 가져 와서 배경 화면으로 설정하려고합니다.로컬 장치의 경로에서 배경 무늬로 설정할 이미지를 얻으십시오.

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 [email protected] 
                      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에서

() 난 단지에 유래에서 내 질문에 대한 답을 찾았지만 나는 한 곳에서 링크를 놓친

if(data!=null) { 
       Bundle bundle = data.getExtras(); 
       System.out.println(" bundle string : "+ bundle.getString("data")); 
       System.out.println(" check here :"+ data.getExtras()!=null?"OK":"NOTOK"); 
       System.out.println(" check here key 2:"+ data.getExtras().containsKey("dat")!=null?"OK":"NOTOK"); 
       Bitmap imagedata = (Bitmap) data.getExtras().get("dat"); 
       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); 
       tv_Ringtone.setText(encodedImage); 
       Prefs.writeString(this,Defines.IMAGE_DATA,encodedImage); 

       Uri wallpaperURI = data.getData(); 
       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); 
      } 
+0

이 활동에 대한 전체 코드를 추가 할 것입니다/조각 –

+0

선택한 벽지의 경로가/문서/이미지 : 9418 – beginner

+0

이 선택한 이미지에 대한 코드를 추가로 설정하십시오 당신이 시도한 이미지 뷰에서 선택된 이미지 –

답변

0

.

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(); 
        } 
       }