2015-11-13 45 views
0

我想使用WallpaperManager类的getCropAndSetWallpaperIntent方法,但面对uri需要的问题。首先,我尝试让Uri获得可资利用的资源,但我认为这是不可能的,并决定将文件写入内部存储并获取其Uri。现在它提供了一个错误,即uri类型必须是内容。我该如何解决这个错误?也许写文件到内存是完全错误的,还有其他解决方案? 这里是我的代码:Android WallpaperManager:开始意图裁剪和调整图片 - 与Uri的问题

public void onclick(View v){ 
     switch (v.getId()) 
     { 

      case R.id.set: 

      // try{ 
       //R.drawable.file1 
       File file =new File(this.getFilesDir(),getResources().getResourceName(R.drawable.file1)); 
       file.setWritable(true); 
       if (!file.exists()) 
       { 
        Bitmap bm= BitmapFactory.decodeResource(getResources(),R.drawable.file1); 
        try { 
         FileOutputStream outputStream=new FileOutputStream(file); 
         bm.compress(Bitmap.CompressFormat.JPEG,100,outputStream); 
         outputStream.flush(); 
         outputStream.close(); 

        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
       Uri uri=Uri.fromFile(file); 
         Intent i=wmanager.getCropAndSetWallpaperIntent(uri); 
        startActivity(i); 
       break; 
      case R.id.clear: 
       try{ 
        wmanager.clear(); 
       } 
       catch (IOException ioex){ 
        ioex.printStackTrace(); 
       } 

     } 

    } 

回答

1

我已经看到了同样的问题,通过下面的方法固定,工作正常。

@TargetApi(Build.VERSION_CODES.KITKAT) private void setWallpaperKitkat(File file) { 
    Uri uri = Uri.fromFile(file); 
    Intent intent = new Intent(WallpaperManager.ACTION_CROP_AND_SET_WALLPAPER); 
    String mime = "image/*"; 
    intent.setDataAndType(uri, mime); 
    try { 
    startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
    //handle error 
    } 
}