这是我读取exif数据的方式,效果很好:
InputStream in;
String description;
try{
in=getContentResolver().openInputStream(uri);
ExifInterface exifInterface=new ExifInterface(in);
description=exifInterface.getAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION);
exif.setText(description);
}catch(IOException e){
e.printStackTrace();
}//catch
这是我的写法,但是它在包含ExifInterface构造函数的行上抛出FileNotFoundException:
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
boolean handled=false;
if(actionId== EditorInfo.IME_ACTION_SEND){
String decription=input.getText().toString();
try {
input.setText("");
File file=new File(uri.toString());
ExifInterface exifInterface=new ExifInterface(file.getCanonicalPath());
exifInterface.setAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION, decription);
exifInterface.saveAttributes();
exif.setText(decription);
}catch(IOException e){
e.printStackTrace();
}catch(NullPointerException e){
Toast.makeText(this,"Select a photo first!",Toast.LENGTH_SHORT).show();
}
handled=true;
}
return handled;
}
我尝试了Uri.getPath()。它会引发相同的错误。
编辑
我添加了写许可权(我不知道如何制作弹出对话框):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="zoom2.david.com.exif">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18"/>
<application...
这是调试时的错误消息:
EDIT2
我想进一步解释我的问题,因为我仍然没有找到任何答案。我希望有人能帮助我。因此,当用户选择照片时,便获得了我用来从中获取文件的uri。我试图构造exifInterface,例如:new ExifInterface(file.get.getAbsolutePath())
。还是一样的错误。