引用drawable中的文件来创建Uri

时间:2013-03-09 12:45:54

标签: android android-file

我想将图片res/drawable-hdpi/nasa_image.jpg设置为壁纸。

我编写了以下代码,但它引发了FileNotFoundException

Uri u1 = Uri.fromFile(new File("res/drawable-hdpi/nasa_image.jpg"));
Uri u2 = Uri.parse("android.resource://com.my.package/drawable/nasa_image.jpg");
Uri u3 = Uri.parse("android.resource://com.my.package/" + R.drawable.nasa_image);
WallpaperManager w = WallpaperManager.getInstance(this);

Bitmap bitmap;
try {
    bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(u));
    w.setBitmap(bitmap);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

首先我尝试了u1。它没用。然后我搜索并找到了this。然后我尝试了u2u3

我查了一下日志。每次它给出相同的FileNotFoundException

如何参考?我哪里错了?我是否选错了根目录?

3 个答案:

答案 0 :(得分:0)

我认为这是在android中执行此操作的错误方法。为什么不使用资源标识符?

ImageView imgView=(ImageView)findViewById(R.id.imageView1);
int id = getResources().getIdentifier(nasa_image, "drawable", getPackageName());
Drawable drawable=res.getDrawable(id);
imgView.setImageDrawable(drawable);

ImageView imgView=(ImageView)findViewById(R.id.imageView1);
Drawable drawable= getResources().getDrawable(R.drawable.nasa_image);
imgView.setImageDrawable(drawable);
imgView.setImageDrawable();

更新以从drawable转换为位图只需使用此(假设您的drawable是instanceof Bitmapdrawable

Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();

如果您不确定可绘制实例

,请使用此方法
public static Bitmap drawableToBitmap (Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

如果您确定自己是正确的文件路径

,请使用此方法
 private Drawable getDrawable(String path) {
      File imgFile = new File(path);
      if (imgFile.exists()) {
         Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
         return new BitmapDrawable(resources, bitmap);
      }
      return null;
   }

您可以根据自己的问题调整它以返回位图或绘图

答案 1 :(得分:0)

你不应该包括扩展名(.jpg) 使用:

Uri.parse("android.resource://" + BuildConfig.APPLICATION_ID + "/drawable/nasa_image");

答案 2 :(得分:-1)

尝试

Uri u1 = Uri.parse("R.drawable.nasa_image");