2013-08-21 86 views
2

感謝您閱讀此問題。我相信這個網站上的專家將能夠提供我需要的幫助。正確存儲在TAG_GPS_PROCESSING_METHOD中的值

我想寫一個應用程序,它允許用戶在他們的Android手機上編輯照片的exif信息。

作爲改進的用戶體驗的一部分,我希望儘可能應用數據驗證。

對於Exif標籤 - TAG_GPS_PROCESSING_METHOD我無法正確應用驗證。

這裏是我已應用的代碼的一部分:

String strGPSProc = etGPSProc.getText().toString(); 

if(strGPSProc.equalsIgnoreCase("GPS") || strGPSProc.equalsIgnoreCase("CELLID") || strGPSProc.equalsIgnoreCase("WLAN") || strGPSProc.equalsIgnoreCase("MANUAL")) { 
     returnValue = true; 
}else { 
     returnValue=false; 
     showToast("Incorrect value for GPS Processing Method. Correct value options are GPS, CELLID, WLAN or MANUAL."); 
     etGPSProc.requestFocus(); 
} 

此代碼檢查如果在的EditText中輸入的值意味着GPSProcessingMethod,有四個規定值中的任一個作爲對文檔中所描述EXIF。

但是,當我嘗試使用setAttribute()和saveAttributes()函數保存這個函數時,logcat中會出現一個不可捕獲的異常。

Unsupported encoding for GPSProcessingMethod 

我從Exif文檔瞭解到,GPSProcessingMethod的值需要存儲一些標題信息。

我需要一些專家建議,關於如何正確實現這一點,無需使用任何其他第三部分類。

回答

1

Accoridng到Exif specification

GPSProcessingMethod

的字符串記錄用於位置發現的方法的名稱。第一個字節表示使用的字符 (表6,表7),後面跟着方法的名稱。由於類型不是ASCII,NULL 終止沒有必要

Atually,表6列出了字符碼作爲8字節的序列,所以上面的可能應該讀「首先字節表示...」。無論如何,ASCII的字符代碼被定義爲41.H, 53.H, 43.H, 49.H, 49.H, 00.H, 00.H, 00.H.,Unicode是(不出所料)55.H, 4E.H, 49.H, 43.H, 4F.H, 44.H, 45.H, 00.H。我想這些應該是你需要的一切。

希望有所幫助。

編輯: 剛剛發現ExifInterface.setAttribute()只支持字符串值...你可以嘗試在你的字符串的開始編碼值,但我懷疑這是行不通的。聽起來像編碼應該由setAttribute()saveAttributes()方法來處理。它可能是API中的錯誤嗎?我看了一下源代碼,但實際寫的值是由本機代碼完成的,所以我停止了進一步的挖掘。

+0

謝謝隊友。這意味着我應該讓這個字段只讀,而不是允許用戶編輯它。至少在錯誤得到糾正之前。 – bosepra