android开发分享如何捕捉图像并将其与原生Android Camera一起存储

我有一个问题捕捉图像,并从本机相机应用程序存储它。 这里是我的一些代码的示例。

_path = Environment.getExternalStorageDirectory() + "make_machine_example.jpg"; File file = new File( _path ); Uri outputFileUri = Uri.fromFile( file ); Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE ); intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri ); startActivityForResult( intent, 0 ); 

照片拍完后,我回到我原来的活动,当我通过Android DDMS文件浏览器导航到我的SD卡的图片不存在。 任何人都知道为什么这不被保存?

    你是否检查过Environment.getExternalStorageDirectory()的输出是什么,因为如果它没有包含尾随文件分隔符(/),那么你的映像将会在一个不在SD卡上的目录中,例如:

      /mnt/sdcardmake_machine_example.jpg 

    当你真正想要的是:

      /mnt/sdcard/make_machine_example.jpg 

    试试这个代码:

      _path = Environment.getExternalStorageDirectory() + File.separator + "make_machine_example.jpg"; 

    这是最后的产品,以防万一还在访问这个主题:

     public class CameraCapture extends Activity { protected boolean _taken = true; File sdImageMainDirectory; protected static final String PHOTO_TAKEN = "photo_taken"; @Override public void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); File root = new File(Environment .getExternalStorageDirectory() + File.separator + "myDir" + File.separator); root.mkdirs(); sdImageMainDirectory = new File(root, "myPicName"); startCameraActivity(); } } catch (Exception e) { finish(); Toast.makeText(this, "Error occured. Please try again later.", Toast.LENGTH_SHORT).show(); } } protected void startCameraActivity() { Uri outputFileUri = Uri.fromFile(sdImageMainDirectory); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case 0: finish(); break; case -1: try { StoreImage(this, Uri.parse(data.toURI()), sdImageMainDirectory); } catch (Exception e) { e.printStackTrace(); } finish(); startActivity(new Intent(CameraCapture.this, Home.class)); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { if (savedInstanceState.getBoolean(CameraCapture.PHOTO_TAKEN)) { _taken = true; } } @Override protected void onSaveInstanceState(Bundle outState) { outState.putBoolean(CameraCapture.PHOTO_TAKEN, _taken); } public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) { Bitmap bm = null; try { bm = Media.getBitmap(mContext.getContentResolver(), imageLoc); FileOutputStream out = new FileOutputStream(imageDir); bm.compress(Bitmap.CompressFormat.JPEG, 100, out); bm.recycle(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } 

    1。 只是使用

     new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg"); 

    不要担心分离器。

    2。 面临同样的问题。 SenseUI手机有一个不创build文件的自定义相机应用程序。 你在用什么设备? 它可能已经在最新的设备中被修复,但它也可能是一个问题。 所以这里有一个完整的示例如何克服它将照片保存到文件的问题 。

    保存图像后应执行介质扫描

      sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

    将此行添加到AndroidManifest.xml文件中,并删除扩展名make_machine_example:

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

    它将开始捕捉照片并存储到SD卡中。

      以上就是android开发分享如何捕捉图像并将其与原生Android Camera一起存储相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/520497.html

      (0)
      上一篇 2020年12月6日
      下一篇 2020年12月6日

      精彩推荐