Android WallpaperManager:开始尝试裁剪和调整图片大小 - Uri的问题

时间:2015-11-13 17:12:10

标签: android file uri

我正在尝试使用WallpaperManager类的getCropAndSetWallpaperIntent方法,但是面对uri需要它的问题。首先,我试图从可绘制资源中获取Uri,但我得出结论认为这是不可能的,并决定将文件写入内部存储并获取其Uri。现在它给出了一个错误,即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 个答案:

答案 0 :(得分: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
  }
}