如何捕捉图像并将其与本机Android相机进行存储
我遇到了捕获图像并将其从本机相机应用程序存储的问题。这里是我的一些代码的示例。如何捕捉图像并将其与本机Android相机进行存储
_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";
是的,我可以确认您需要添加文件分隔符 – 2010-08-17 10:13:49
1。只需使用
new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg");
并不打扰分隔符。
2。面临同样的问题。 SenseUI手机有一个不创建文件的自定义相机应用程序。你使用什么设备?它可能已经在最新的设备中被修复,但它也可能是一个问题。所以这里有一个完整的示例如何克服它Problems saving a photo to a file。
这是任何人的情况下最终产品仍然是访问的主题:
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();
}
}
}
您是否需要在清单中设置额外的权限?我不能给我自己的名字保存到sd – Vincent 2011-04-14 07:19:10
是的图像文件是... \t – ninjasense 2011-04-14 15:19:43
嗨忍者!!我可以知道,什么是“Home.class”?其说创建一个类/枚举等我是新的android编程。 – iankits 2011-10-22 00:44:39
加入这一行到AndroidManifest.xml文件并删除扩展make_machine_example:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
它将开始捕捉照片并存储到SD卡中。
它不会存储捕获的图像。 – 2015-02-09 10:53:13
你应该保存图像后进行媒体扫描
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
大家好,我想了Android的原生相机捕捉图像并储存起来..所以把我所造的赏金becoz它 – 2010-08-16 05:17:59
困扰帕雷什捕捉图像有什么问题?这个问题中显示的方法不适合你吗? – Janusz 2010-08-16 07:36:46
@Janusz我必须把一个文本视图(活动名称),一个按钮(在底部)和屏幕中间,相机预览是在那里,并在按钮点击事件,照片应点击和照片应显示在另一个ImageView活动 – 2010-08-16 09:00:08