ContentResolver在API级别18上抛出FileNotFoundException

时间:2014-03-03 19:23:15

标签: android android-contentprovider

当我尝试在Android API Level 18上使用ContentResolver插入文件后立即打开文件时,会抛出异常FileNotFoundException。

如果我尝试在API级别17上运行相同的代码,它可以正常工作。

String fileName = DateFormat.format("yyyyMMdd_hhmmss", new Date()).toString();  

ContentValues values = new ContentValues();
values.put(Images.Media.TITLE, fileName);
values.put(Images.Media.MIME_TYPE, "image/jpeg");

ContentResolver contentResolver = getContentResolver();
Uri uri = contentResolver.insert(Media.EXTERNAL_CONTENT_URI, values);

OutputStream outstream;
try {
    outstream = contentResolver.openOutputStream(uri);
    image.compress(Bitmap.CompressFormat.JPEG, 90, outstream);
    outstream.close();

    return uri;
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

我尝试使用Images.Media.insertImage(),但它也没有用。查看此方法的源代码,我意识到代码看起来很像我的。

1 个答案:

答案 0 :(得分:1)

不幸的是,使用ContentResolver无法按预期工作。所以我决定使用其他方法。

try {

    String fileName = DateFormat.format("yyyyMMdd_hhmmss", new Date()).toString();  

    File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    dir.mkdirs();               

    File file = new File(dir, fileName + ".jpg");               

    OutputStream out = new FileOutputStream(file);

    image.compress(Bitmap.CompressFormat.JPEG, 90, out);

    out.close();

    MediaScannerConnection.scanFile(this, 
                   new String[] { file.toString() }, 
                   null, 
                   null);               

} catch (IOException e) {
    e.printStackTrace();
}