拍照不预览 Android
Posted
技术标签:
【中文标题】拍照不预览 Android【英文标题】:Take Picture without preview Android 【发布时间】:2012-06-03 17:24:45 【问题描述】:我想在没有任何预览的情况下拍照。我使用了此代码,但出现错误:
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
camera.setParameters(parameters);
SurfaceView mview = new SurfaceView(getBaseContext());
try
camera.setPreviewDisplay(mview.getHolder());
camera.startPreview();
camera.takePicture(null,null,photoCallback);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
Camera.PictureCallback photoCallback=new Camera.PictureCallback()
public void onPictureTaken(byte[] data, Camera camera)
Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());
OutputStream imageFileOS;
try
imageFileOS = getContentResolver().openOutputStream(uriTarget);
imageFileOS.write(data);
imageFileOS.flush();
imageFileOS.close();
Toast.makeText(androidTestJNIActivity.this, "Image saved: " + uriTarget.toString(), Toast.LENGTH_LONG).show();
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
finish();
;
当我尝试访问相机时收到 NullPointerException。我不知道如何初始化它。我认为问题在于相机从未初始化。
05-29 14:40:20.330: E/AndroidRuntime(15571): FATAL EXCEPTION: main
05-29 14:40:20.330: E/AndroidRuntime(15571): java.lang.RuntimeException: Unable to start activity ComponentInfocom.achillessecurity.androidtestjni/com.achillessecurity.androidtestjni.AndroidTestJNIActivity: java.lang.RuntimeException: Fail to connect to camera service
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.os.Looper.loop(Looper.java:130)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.app.ActivityThread.main(ActivityThread.java:3835)
05-29 14:40:20.330: E/AndroidRuntime(15571): at java.lang.reflect.Method.invokeNative(Native Method)
05-29 14:40:20.330: E/AndroidRuntime(15571): at java.lang.reflect.Method.invoke(Method.java:507)
05-29 14:40:20.330: E/AndroidRuntime(15571): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
05-29 14:40:20.330: E/AndroidRuntime(15571): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
05-29 14:40:20.330: E/AndroidRuntime(15571): at dalvik.system.NativeStart.main(Native Method)
05-29 14:40:20.330: E/AndroidRuntime(15571): Caused by: java.lang.RuntimeException: Fail to connect to camera service
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.hardware.Camera.native_setup(Native Method)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.hardware.Camera.<init>(Camera.java:258)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.hardware.Camera.open(Camera.java:235)
05-29 14:40:20.330: E/AndroidRuntime(15571): at com.achillessecurity.androidtestjni.AndroidTestJNIActivity.onCreate(AndroidTestJNIActivity.java:42)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-29 14:40:20.330: E/AndroidRuntime(15571): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
我通过以下方式初始化相机:
camera= Camera.open();
【问题讨论】:
@PadmaKumar 我用堆栈跟踪更新我的帖子 @113408 你能帮帮我吗?我需要一个可以使用前后摄像头拍摄照片的应用程序。我尝试了您的应用,但它在某些设备上不起作用! @محمد 这是一个已有 2 年历史的帖子,更好的方法是打开一个新帖子或将链接放在这里 你能告诉我一个更好的方法吗!?我找不到在背景中拍照的好样品! :( 【参考方案1】:使用此权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
你可以使用这个实例化一个相机对象
Camera mycamera = Camera.open();
如果您喜欢简单,可以尝试这里描述的方法非常简单:
http://developer.android.com/training/camera/photobasics.html
【讨论】:
感谢您的回复。我初始化相机,现在我收到一个新错误,请参阅我的编辑 @HamzaKarmouda 你在清单文件中设置了权限吗? 当然可以。我不知道为什么它无法将相机连接到服务 你是对的,初始化相机我们必须做Camera.open()
并且不要忘记关闭相机以避免Fail to connect service
错误【参考方案2】:
Android 不能在没有预览的情况下使用相机...但是,您可以将预览大小设置为 1x1 像素,然后您将看不到它,但您仍然可以使用相机。
【讨论】:
【参考方案3】:关于您的Fail to initialize camera
错误,另一种可能是相机正在被其他东西使用。
【讨论】:
【参考方案4】:这是因为相机不能立即工作,而且经常不同步。某些设备需要在startPreview ()
和takePicture ()
之间有很大的延迟。
例如:三星设备需要至少 100 毫秒才能启动相机。
您可以通过延迟 takePicture()
方法来解决此错误。
mview.postDelayed(new Runnable()
@Override
public void run()
try
camera.takePicture(null, null, photoCallback);
catch (Exception e)
e.printStackTrace();
, 100);
【讨论】:
以上是关于拍照不预览 Android的主要内容,如果未能解决你的问题,请参考以下文章
Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等