2014-03-03 42 views
2

當我嘗試在Android API級別18上使用ContentResolver插入文件後立即打開文件時,它會拋出異常FileNotFoundException。ContentResolver在API級別18上拋出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(),但它沒有工作太多。看這種方法的源代碼,我意識到代碼看起來很像我的。

+0

您是否已將Android API Level 18庫下載到IDE中? – BillyBigPotatoes

+0

uri是什麼樣的? – njzk2

+0

@BillyBigPotatoes使用SdkManager.exe – MAC

回答

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(); 
} 
相關問題