2011-12-09 127 views
2

如何拍照並將其保存到特定文件夾。我知道它保存到SD卡/ DCIM /等Monodroid將imageview設置爲存儲在SD卡上的圖像

但我不希望它在那裏,我希望它被保存在/ SD卡/相機

我已經做了目錄與下列文件夾中:

String destPath = Android.OS.Environment.ExternalStorageDirectory + "/Camera"; 

然後我啓動相機意圖,並嘗試將保存文件指向我所做的路徑。

Intent launchCamera = new Intent(Android.Provider.MediaStore.ActionImageCapture); 
launchCamera.PutExtra(MediaStore.ExtraOutput, destPath); 

這是行不通的。圖像仍然保存到/ sdcard/dcim/etc

想法?

回答

2

從我使用Monodroid開發應用程序時收集到的信息來看,攝像頭非常麻煩,並且在大多數時間都沒有達到您想要的效果。這包括指定要保存圖像捕捉的目標。 據我所知,這些問題不是特定於Monodroid,並與java android sdk發生。

解決這個問題,你可能想要看的是捕獲圖像而不指定目的地,然後在OnActivityResult方法中檢索保存到圖庫的最新圖像。一旦你得到最新的形象,你可以把它移動到你的首選目的地。

以下是OnActivityResult中的一些示例代碼。

檢索所拍攝的圖像

Android.Net.Uri targetUri = data.Data; 
String origin = ""; 
String [] proj = { MediaStore.MediaColumns.Data.ToString(), BaseColumns.Id }; 

var qry = ManagedQuery (MediaStore.Images.Media.ExternalContentUri, proj, null, null, "date_added DESC"); 

qry.MoveToFirst(); 

origin = qry.GetString (qry.GetColumnIndexOrThrow (MediaStore.MediaColumns.Data.ToString())); 
的文件名

圖像移動到您想要的目的地

System.IO.File.Move (origin, "yourdestinationfilenamehere"); 
1

我想添加到lanks的解決方案。

比方說,您使用下面的代碼進行拍照

var uri = ContentResolver.Insert(MediaStore.Images.Media.ExternalContentUri, 
           new ContentValues()); 

var intent = new Intent(MediaStore.ActionImageCapture); 
intent.PutExtra(MediaStore.ExtraOutput, uri); 
StartActivityForResult(intent, ACTIVITY_RESULT_PICTURE_TAKEN); 

pictureUri = uri; 

凡ACTIVITY_RESULT_PICTURE_TAKEN只是一個簡單的價值,你可以在 OnActivityResult使用它來檢查活動被完成。

你OnActivityResult可能是這個樣子:

protected override void OnActivityResult(int requestCode, 
             Result resultCode, Intent data) 
{ 
    if (resultCode == Result.Ok && requestCode == ACTIVITY_RESULT_PICTURE_TAKEN) 
    { 
     string picturePath = GetRealPathFromURI(pictureUri); 
     //Do something with the file 
    } 
} 

你早點起牀URI是具體到Android的東西,需要翻譯。

它看起來像「// content:// media/external/media/11917」,它不是 有效路徑。

哪個是GetRealPathFromURI功能不正是:

public string GetRealPathFromURI(Android.Net.Uri contentUri) 
{    
    var mediaStoreImagesMediaData = "_data"; 
    string[] projection = { mediaStoreImagesMediaData }; 
    Android.Database.ICursor cursor = this.ManagedQuery(contentUri, projection, 
                 null, null, null); 
    int columnIndex = cursor.GetColumnIndexOrThrow(mediaStoreImagesMediaData); 
    cursor.MoveToFirst(); 
    return cursor.GetString(columnIndex); 
} 

一旦你得到了真正的路徑,你可以把它移到無論你想爲lanks建議。

相關問題