2017-10-20 45 views
0

我在我的可繪製文件夾下有一個png文件,我想將它保存到我的物理設備中的某個文件夾中。保存可下繪圖到存儲器中的圖像

我已經有寫權限和一切,但我不能總是做我想要的。有趣的是,如果我嘗試10次來保存圖像,它會以某種方式管理兩次,而不是更多。

我使用的LG 3,是Android 5.0,API 21.當我昨天試了一下沒有保存圖像。然而今天,當我一直在尋找通過我看到的圖像畫廊..

我也設法保存圖像與API 22模擬器,但從來沒有與API 24

這是代碼:

ActivityCompat.requestPermissions(ShareActivity.this,new String[] {android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1); 

Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.instagram_logo); 

File path = Environment.getExternalStorageDirectory(); 


File dir = new File(path + "/savehere/"); 
if(!dir.exists()) 
{ 
    dir.mkdirs(); 
} 
else 
{ 
    Toast.makeText(mContext, "Directory already exists", Toast.LENGTH_SHORT).show(); 
} 


File file = new File(dir,"photo.png"); 

OutputStream out = null; 

try 
{ 
    out = new FileOutputStream(file); 
    image.compress(Bitmap.CompressFormat.PNG,80,out); 
    out.flush(); 
    out.close(); 

} 
catch (FileNotFoundException e) 
{ 
    e.printStackTrace(); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 
+0

'dir.mkdirs()借用;'檢查返回值,因爲它可能無法創建一個目錄。如果是,則向用戶顯示敬酒並返回。如果要將文件放置在不存在的目錄中,繼續執行並不合理。 – greenapps

+0

把Toast()放在這些catch塊中,這樣你的app的用戶就會被告知這些異常。 ...你也是...... – greenapps

+1

'我正在通過畫廊看我看到的圖像。錯了。您不應使用圖庫應用程序來檢查您的文件是否已創建。完全錯誤。您應該使用文件資源管理器應用程序並查看該目錄。 – greenapps

回答

0

你需要確保你在清單中的寫權限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

您需要檢查外部存儲是否可用,可能是SD卡。檢查一下。

public boolean isExternalStorageWritable() { 
String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
    return true; 
    } 
    return false; 
} 

一旦完成,使用下面的函數獲取一個位置來實際存儲文件。

String filename = "SampleFile.png"; 
String filepath = "MyFileStorage"; 
File myExternalFile = new File(getExternalFilesDir(filepath), filename); 
FileOutputStream fos = new FileOutputStream(myExternalFile); 
image.compress(Bitmap.CompressFormat.PNG,80,fos); 
out.flush(); 
out.close(); 

代碼從Android External Storage – Read, Write, Save FileSaving Files Android Developer

+0

你的情況是什麼myExternalFile? –

+0

@ConiSayns它是File對象,它保存對名爲SampleFile.txt的文件的引用,名稱爲MyFileStorage, –

+0

那麼inputText又如何呢? @Jude –