我一直在尝试创建一个Android相机活动来测试它在模拟器上的工作方式,但我不确定我是否做得对。
我已为不推荐的相机版本,焦点和前置摄像头添加了对清单的权限。我一直在查阅教程并学习代码。
我还尝试使用一些自定义按钮添加框架布局预览,但我真的不知道如何使按钮布局覆盖框架。
我需要使用片段吗?
另外我应该提一下我读过的关于新的" camera2"并且我有兴趣将它实现到相同的活动,但也许这对于简单的测试来说太多了。您对此有何建议?
答案 0 :(得分:0)
如果您搜索代码,请尝试以下示例代码(我在How to move image captured with the phone camera from one activity to an image view in another activity?也有答案,您可以查看一下)。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mFileUri = Uri.fromFile(getOutputMediaFile(1));
intent.putExtra(MediaStore.EXTRA_OUTPUT, mFileUri);
// start the image capture Intent
startActivityForResult(intent, 100);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
if (resultCode == RESULT_OK) {
if (mFileUri != null) {
// do something...
}
}
}
private static File getOutputMediaFile(int type) {
// External sdcard location
File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "DCIM/Camera");
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
File mediaFile;
if (type == 1) { // image
mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
} else if (type == 2) { // video
mediaFile = new File(mediaStorageDir.getPath() + File.separator + "VID_" + timeStamp + ".mp4");
} else {
return null;
}
return mediaFile;
}
如果使用模拟器进行测试,请确保支持相机:
答案 1 :(得分:0)
我不认为我可以给你一个确切的答案,因为这是一个很难回答的问题。但我会尽力为您的方法提供一些高级指导。
通常使用Fragments是编写Android应用程序的最佳方式,现在推荐使用它。
您可以使用Android中的Intents使另一个应用程序代表您的应用程序工作。您可以在哪个位置启动设备上安装的相机应用程序,以代表您的应用程序拍摄图像。
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
您可以从here
了解更多信息但是,如果您想编写自己的自定义Camera API,这些相机API就会发挥作用。因为有些情况下您实际上需要自己的自定义相机功能,以满足您正在构建的应用程序的特殊要求。
因此,决定你想要达到的目标。如果您只想获得照片并保存,您只需使用Intent并请求相机应用程序为您的应用拍摄照片。
要更深入地了解相机API,您可以从here
开始编辑,
是的,您实际上可以执行以下操作
if (Build.VERSION.SDK_INT > 9) {
并根据版本具有不同的执行路径。