Articles of android camera intent

Android上的相机示例

我想写一个活动: 显示相机预览(取景器),并有一个“捕获”按钮。 按下“捕获”按钮时,拍摄照片并将其返回到调用活动(setResult()&finish())。 是否有适用于每个设备的 完整示例? 链接到一个简单的开源应用程序拍照将是理想的答案。 我到目前为止的研究: 这是一个常见的场景,有很多问题和教程。 主要有两种方法: 使用android.provider.MediaStore.ACTION_IMAGE_CAPTURE事件。 看到这个问题 直接使用Camera API。 请参阅此示例或此问题(包含大量参考) 。 方法1本来是完美的,但问题是每个设备上的意图实现不同。 在某些设备上它运行良好。 但是,在某些设备上,您可以拍照,但它永远不会返回到您的应用。 在某些设备上,启动意图时没有任何反应。 通常它还会将图像保存到SD卡,并且需要存在SD卡。 每个设备上的用户交互也不同。 方法2的问题是稳定性。 我尝试了一些例子,但我设法阻止相机在某些设备上工作(直到重启)并完全冻结另一台设备。 在其他设备上捕获工作,但预览保持黑色。 我会使用ZXing作为示例应用程序(我使用它很多),但它只使用预览(取景器),并且不拍任何照片。 我还发现,在某些设备上,ZXing在光照条件改变时没有自动调整白平衡,而原生相机应用程序正确地做到了(不确定是否可以修复)。 更新: 有一段时间我直接使用了相机API。 这提供了更多控制(自定义UI等),但我不建议任何人。 我会在90%的设备上工作,但每次都会发布一个新的设备,但会遇到不同的问题。 我遇到的一些问题: 处理自动对焦 处理闪光灯 配备前置摄像头,后置摄像头或两者的支持设备 每个设备都有不同的屏幕分辨率,预览分辨率(并不总是与屏幕分辨率匹配)和图像分辨率的组合。 所以一般来说,除非别无其他办法,否则我不建议去这条路线。 两年后,我通过自定义代码转储并切换回基于Intent的方法。 从那时起,我的麻烦就少了很多。 我过去在基于意图的方法中遇到的问题可能只是我自己的无能。 如果你真的需要走这条路,我听说如果你只支持Android 4.0+的设备会更容易。

android减少摄像头捕获图像的文件大小小于500 kb

我的要求是将摄像头捕获的图像上传到服务器,但它应该小于500 KB。 如果它大于500 KB,则需要将其减小到小于500 KB的大小(但稍微接近它) 为此,我使用以下代码 – @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { try { super.onActivityResult(requestCode, resultCode, data); if (resultCode == getActivity().RESULT_OK) { if (requestCode == REQUEST_CODE_CAMERA) { try { photo = MediaStore.Images.Media.getBitmap( ctx.getContentResolver(), capturedImageUri); String selectedImagePath = getRealPathFromURI(capturedImageUri); img_file = new File(selectedImagePath); Log.d(“img_file_size”, “file size in KBs (initially): ” + […]

相机意图不保存照片

我以前成功使用过此代码片段,但文件指向SD卡上的某个位置。 final File temp = new File(getCacheDir(), “temp.jpg”); temp.delete(); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(temp)); startActivityForResult(intent, CONFIG.Intents.Actions.SELECT_CAMERA_PHOTO); 但是,当我使用getCacheDir而不是SD卡上的loc时,似乎从未保存过照片。 这是缓存目录和图像捕获的限制吗?

广播接收器不会收到相机事件

我正在尝试创建一个可以检测用户何时拍照的应用。 我设置了一个广播接收器类,并通过以下方式将其注册在清单文件中: 无论我尝试做什么,该程序都不会收到广播。 这是我的接收器类: public class photoReceiver extends BroadcastReceiver { private static final String TAG = “photoReceiver”; @Override public void onReceive(Context context, Intent intent) { CharSequence text = “caught it”; int duration = Toast.LENGTH_LONG; Log.d(TAG, “Received new photo”); Toast toast = Toast.makeText(context, text, duration); toast.show(); } } 如果我删除清单和我的活动中的mimeType行,我会发送自己的广播 Intent intent = new Intent(“com.android.camera.NEW_PICTURE”); sendBroadcast(intent); 然后我成功收到广播,可以看到日志和吐司窗口​​。 […]

android camera:将结果ResultInfo {who = null,request = 0,result = -1,data = null}传递给activity

我真的很沮丧地解决我的问题,我有一个使用相机的应用程序,当相机拍摄照片时,它会显示活动,当我不使用cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoUri); 照片将显示在活动上,但名称和路径文件不是我想要的。 我正在使用galaxy选项卡进行编译,我已经按照教程从这里解决了我的问题, 这里和这里但我的应用程序仍然强制关闭和错误,这是我的代码: { File sdCard= Environment.getExternalStorageDirectory(); File path = new File (sdCard.getAbsolutePath() + “/android/data/spaj_foto”); path.mkdir(); File file= new File (path,”spaj_foto.png”); String filePath =”/android/data/spaj_foto/spaj_foto.png”; try { file.createNewFile(); } catch (IOException e) {} mPhotoUri = Uri.fromFile(file); values.put( MediaStore.Images.ImageColumns.DATA, file.getPath()); mPhotoUri=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoUri); startActivityForResult(cameraIntent,TAKE_PHOTO_CODE ); } activityresult方法: @Override protected […]

从ACTION_IMAGE_CAPTURE Intent获取图像路径

您好我使用ACTION_IMAGE_CAPTURE使用Intent捕获图像,如下所示: Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra( MediaStore.EXTRA_OUTPUT, (new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()) + “.jpg”)) ); startActivityForResult(cameraIntent, 0); 我需要将图像存储在SD卡中,并使用onActivityResult方法检索该图像的路径。 我不知道如何获取当前捕获图像的图像路径。 如果有人知道请帮助。 谢谢

使用相机意图在android中获取捕获图像的路径

我一直试图获取捕获图像的路径以删除图像,在stackoverflow上find很多答案,但它们都没有为我工作,我得到了以下答案 private String getLastImagePath() { final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA }; final String imageOrderBy = MediaStore.Images.Media._ID + ” DESC”; Cursor imageCursor = POS.this.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy); if (imageCursor.moveToFirst()) { // int id = imageCursor.getInt(imageCursor // .getColumnIndex(MediaStore.Images.Media._ID)); String fullPath = imageCursor.getString(imageCursor .getColumnIndex(MediaStore.Images.Media.DATA)); return fullPath; } else { return “”; } } 但此代码适用于三星选项卡,但在lenovo选项卡和i-ball选项卡中不起作用。 […]

Android:BroadcastReceiver意图检测相机拍摄的照片?

我正在开发一个Android应用程序,每次使用手机拍摄新图像时都需要执行一个操作。 我不想在应用程序中拍摄图像,而是在相机应用程序拍摄图像并将其保存到SD卡时执行一些操作。 现在,我得到了一个BroadcastReceiver,目前正在侦听“android.intent.action.CAMERA_BUTTON”。 但是,这似乎并没有被调用,当我想要它。 我尝试在自己的电话上用BroadcastReceiver的OnReceive方法的第一行中的换行符来debugging应用程序,但它永远不会到达该代码。 有谁知道我应该听的正确意图是什么? 还是使用BroadcastReceiver甚至不是最好的方式来做到这一点? (例如,有没有更好的方法来完成这一点,比如听一个新的图像保存到卡上)? 谢谢! 更新:我的手机上有一个轨迹球(HTC Eris),那么以这种方式拍摄照片可能不会作为“相机button”发送? 如果是这样,有没有一个“相机button”,而是像一个轨迹球的手机的解决方法?

安卓相机的人像定位

我在我的应用程序中使用相机。 我只是用intent启动相机 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(cameraIntent, 101); 捕获的图像自动进入landscape view 。 如何让camera以portrait view捕捉图像

如何获得刚刚从相机拍摄的图像path

下面是我的代码,但没有给我onActivity结果中的图像path Uri selectedImageUri = data.getData(); selectedImagePath = getPath(selectedImageUri); Log.w("jay", "Camera Image Path :" + selectedImagePath); Toast.makeText(MiscansOther_pannel.this, selectedImagePath, Toast.LENGTH_LONG).show();