nin*_*nse 35 camera android android-intent android-camera android-camera-intent
我在捕获图像并将其存储在本机相机应用程序时遇到问题.以下是我的一些代码示例.
_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 );
Run Code Online (Sandbox Code Playgroud)
拍完照片后我又回到原来的活动中,当我通过Android DDMS文件浏览器导航到我的SD卡时,图片不存在.任何人都知道为什么没有得救?
nin*_*nse 27
这是最终产品,以防任何人仍在访问此主题:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
ste*_*ter 21
您是否检查过Environment.getExternalStorageDirectory()的输出是什么,因为如果它不包含尾随文件分隔符(/),那么您的映像将最终位于不驻留在SD卡上的目录中,例如:
/mnt/sdcardmake_machine_example.jpg
Run Code Online (Sandbox Code Playgroud)
当你真正想要的是:
/mnt/sdcard/make_machine_example.jpg
Run Code Online (Sandbox Code Playgroud)
请尝试使用此代码:
_path = Environment.getExternalStorageDirectory() + File.separator + "make_machine_example.jpg";
Run Code Online (Sandbox Code Playgroud)
Fed*_*dor 14
1.只是用
new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg");
Run Code Online (Sandbox Code Playgroud)
并且不要为分隔符而烦恼.
2.之前面临同样的问题.SenseUI手机有一个不创建文件的自定义相机应用程序.你用的是什么设备?它可能已经在最新的设备中修复,但它仍然可能是一个问题.所以这里有一个完整的示例如何克服它将照片保存到文件的问题.
| 归档时间: |
|
| 查看次数: |
47531 次 |
| 最近记录: |