【发布时间】:2016-08-01 17:26:17
【问题描述】:
我正在开发一个名为 camera.app 的小型应用程序项目,它会拍照并在屏幕上返回照片。当照片是局部变量时,我可以完成所有步骤。但是,当我想将其保存在特定路径中并从路径中读取时,Android 总是会发出警告
'E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/camera_app/cam_image.jpg: open failed: ENOENT (No such file or directory)'
也有看不懂的警告,比如
E/linker: readlink('/proc/self/fd/42') failed: Permission denied [fd=42]
E/HiApp.SerializedObject: Thread-840{840} a.b(null:-1) <<< ERROR >>> read file error/storage/emulated/0/Android/data/com.huawei.appmarket/files/Data/.AppCheckInfo: open failed: ENOENT (No such file or directory)
计算机可以读取 sdcard。不知道怎么调试代码
Button button;
ImageView imageView;
static final int CAM_REQUEST = 1;
String SDPath = Environment.getExternalStorageDirectory().getAbsolutePath();
TextView SDCard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.bn);
imageView = (ImageView) findViewById(R.id.img);
SDCard = (TextView)findViewById(R.id.sdcard);
SDCard.setText(SDPath);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = getFile();
Uri contentUri = Uri.fromFile(file);
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,contentUri);
startActivityForResult(camera_intent,CAM_REQUEST);
}});
}
private File getFile(){
File folder = new File(SDPath+"/camera_app");//"EVA-AL10/sdcard/camera_app" "storage/1599-2841/camera_app"
if(!folder.exists()){
folder.mkdir();
}
File image_file = new File(folder,"cam_image.jpg");
return image_file;
}
protected void onActivityResult(int requestCode, int resultCode, Intent data){
String path = SDPath+"/camera_app/cam_image.jpg";//"EVA-AL10/sdcard/camera_app/cam_image.jpg"
imageView.setImageDrawable(Drawable.createFromPath(path));
}
更新的 xml:
<uses-feature android:name="android.hardware.camera2"
android:required="true"></uses-feature>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
【问题讨论】:
-
如果您的目标是 SDK 23+,请确保您拥有运行时请求权限。
-
您在哪个版本的 android 上测试您的应用?
标签: android android-external-storage