是否可以在不显示相机预览的情况下拍摄图像?我要求我能够从线程或服务中捕获图像,而不会干扰前景应用程序,我不想显示相机预览,但我仍想在后台捕获图像并将其存储在设备中
我想用原始图像进行图像处理而不在屏幕上显示,这显然会降低性能.
根据这个线程的答案从相机拍摄照片没有预览,这在Android 1.5中是不可能的,但有人知道它是否可以在Android 4(API级别15)?
我用这段代码从相机中捕捉图像.
package android.takeowneship;
import java.io.File;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.ImageView;
import android.widget.Toast;
public class camera extends Activity{
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
Uri imageUri;
private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//define the file-name to save photo taken by Camera activity
String fileName = "new-photo-name.jpg";
//create parameters for Intent with filename
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture …Run Code Online (Sandbox Code Playgroud) 现在我想要的只是一个应用程序,只需在启动时从相机拍摄照片.没有布局,没有相机预览......没有,只是一个简单的应用程序图标来启动应用程序.一旦启动,相机应该拍照.
这是预览图像,我不想在我的应用程序中显示.我只是想让我的应用程序点击图片中包围的拍照按钮:

拍完照片后,我需要将照片保存在照片库中.
有人能指导我吗?谢谢
这是我在仿真器和设备上尝试过的一些代码.
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class Main extends Activity implements SurfaceHolder.Callback{
private Camera camera;
private ImageButton cameraClick;
private SurfaceHolder mHolder;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
mHolder = surfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
cameraClick = (ImageButton) findViewById(R.id.cameraClick);
cameraClick.setOnClickListener( …Run Code Online (Sandbox Code Playgroud) 根据Java SDK方面的Android相机文档,必须提供相机预览帧(可见和活动)表面以便访问帧数据.我已经把我遇到的一些事情联系在一起(我是新的,因此有2个超链接限制),但我在结束发布我自己的问题之前,已经查阅了大量关于各种事情的文档.
a)我明确地不想将相机预览绘制到屏幕上,如果可能的话,我只想直接从相机缓冲区获取字节数据(我可以从这里获得).
b)是的,我看到了这一点: 没有预览就从相机拍照.
然而,这决定了使用这个库的应用程序都在插入这个(貌似)任意查看到他们的应用程序布局,这必须是可见的所有的时间(他们无法切换布局,父容器的变化可视性或使用子活动)应用程序生命周期.
事实上,我的需求类似于这张海报,除了我想要连续实时的相机预览数据流,而不是保存到磁盘上的图像的捕获.因此PictureCallback,他和myCamera.takePicture电话一起为他工作.出于显而易见的原因,将连续捕获写入磁盘对我来说不是一个解决方案,因此在我的情况下不起作用.myCamera.takePicture也比获取预览帧慢得多.
c)我已经开始涉足NDK了,并且对它有了很好的感觉.然而,根据这种访问摄像机数据通过本机不支持或推荐,并且即使在那时设备兼容性也是一个巨大的麻烦.
如果这已经过时了,并且有可靠的NDK路线从Android设备获取相机数据,我找不到它们,所以如果你能指出它们会很棒.
d)我想通过像Unity这样的工具(以统一插件的形式)访问这个库,我希望能够将它编译成JAR(或原生的.so)并期望它可以工作Android应用程序以这种方式导入库,以便他们可以使用相机而无需应用程序开发人员所需的特定UI /布局配置.
我希望能够创建一个用于Android应用程序的视觉处理库,并且不希望使用库限制应用程序必须使用特定的应用程序布局并将特定视图绘制到屏幕以便使用该视觉处理结果 - 一个非常简单的例子,如果一个应用程序想要使用我的库来获得相机看到的平均颜色,并想要在屏幕上为该颜色着色图像.
无论我有什么建议,我都会对我提出的任何要点都非常有帮助.非常感谢你的时间!
我想实现一种功能,当有人试图解锁我的设备并输入错误密码3次时,通过前置摄像头捕获图像.我检查过它可以在Android中使用,某些应用程序也可以在Market中使用.
我已经做了一些工作来实现这一目标,但我得到了一个黑色的图像.这是代码:
注册设备管理员以获取广播的错误密码尝试:
public class DeviceAdminSample extends DeviceAdminReceiver {
static Context ctx;
static SharedPreferences getSamplePreferences(Context context) {
ctx = context;
return context.getSharedPreferences(
DeviceAdminReceiver.class.getName(), 0);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
System.out.println("Password Attempt is Failed...");
Intent i = new Intent(context, CameraView.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Run Code Online (Sandbox Code Playgroud)
Camera Class捕获图像并将其保存到SD卡:
public class CameraView extends Activity implements SurfaceHolder.Callback,
OnClickListener {
private static final String TAG = "CameraTest";
Camera mCamera;
boolean mPreviewRunning = false;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.e(TAG, …Run Code Online (Sandbox Code Playgroud) android android-intent android-camera android-camera-intent android-canvas
我正在开发一个在后台运行的服务,它可以将成功的图像和数据上传到网络上.
现在我想上传相机拍摄的图像.
在Android 2.2上没有预览的情况下,是否可以在后台服务中使用相机?
我在网上发现了各种对比剂的答案......
我该怎么做?
我想拍一张没有任何预览的照片.我使用了这段代码但是我收到了一个错误:
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 …Run Code Online (Sandbox Code Playgroud) 我只需要获取相机预览数据,但不能看到预览.由于我在服务中完成所有这些工作,因此我必须创建一个虚拟SurfaceView,它可以很好地工作.
我使用了这个答案的代码:https: //stackoverflow.com/a/10268650/1395697
但是,TYPE_SYSTEM_OVERLAY它没有用.它是不可见的,但没有收到预览数据(in onPreviewFrame()).当我将此参数更改为0时,我获得预览数据,但是SurfaceView可见.
你知道其他任何方法吗?
我现在所做的只是SurfaceView在宽度和高度为1时可见,然后我创建一个ImageView具有特定颜色的叠加层,这样你就看不到颜色的变化了SurfaceView.但这根本不是很好,我真的想做得更好.
我试图弄清楚是否可以使用后台服务中的摄像机视频流而不是正常的意图.
我的想法是:
在尝试实现所有这些之前,我想知道是否可能.
提前致谢
尼古拉