Service 在后台服务中从照相机拍摄图像

Service 在后台服务中从照相机拍摄图像,service,background,camera,Service,Background,Camera,我正在创建一个应用程序,它将作为后台服务工作,并将定期从前置摄像头拍摄图像,无需预览,应用程序必须保持后台状态。我在一个论坛上找到了来源。人们说代码是有效的,但对我来说,这代码不起作用。我不能拍照 请帮我修复这个代码。对不起,我的英语() 公共类CamService扩展服务{ 私有静态最终字符串标记=“CameraDemo”; 专用最终计划执行器服务计划程序= Executors.newScheduledThreadPool(1); 摄像机; 预定的未来蜂鸣器手柄; /*服务生命周期覆盖*/ @

我正在创建一个应用程序,它将作为后台服务工作,并将定期从前置摄像头拍摄图像,无需预览,应用程序必须保持后台状态。我在一个论坛上找到了来源。人们说代码是有效的,但对我来说,这代码不起作用。我不能拍照

请帮我修复这个代码。对不起,我的英语()

公共类CamService扩展服务{
私有静态最终字符串标记=“CameraDemo”;
专用最终计划执行器服务计划程序=
Executors.newScheduledThreadPool(1);
摄像机;
预定的未来蜂鸣器手柄;
/*服务生命周期覆盖*/
@凌驾
public void onCreate(){
super.onCreate();
camera=camera.open();
试一试{
camera.setPreviewDisplay(空);
}捕获(IOE异常){
e、 printStackTrace();
}
定期服用(5);
}
@凌驾
公共空间{
stopPics();
super.ondestory();
}
@凌驾
公共IBinder onBind(意图arg0){
返回null;
}
/* ----------------------------------- */
私有IMyRemoteService.Stub myRemoteServiceStub=新的IMyRemoteService.Stub(){
/*基本服务方法*/
公共布尔值isCollecting(){
返回(蜂鸣器手柄!=null);
}
/* ------------------------- */
};
定期(长期)采取公共无效措施{
最终可运行蜂鸣器=新可运行(){
公开募捐
{ 
照相/摄像(快门回叫、画幅回叫、JPEG回叫);
}
};
camera.startPreview();
beeperHandle=scheduler.scheduleAtFixedRate(蜂鸣器,周期,周期,时间单位,秒);
}
公共图书馆{
蜂鸣器手柄。取消(真);
蜂鸣器手柄=空;
camera.stopPreview();
相机。释放();
摄像机=零;
}
/*摄像机回拨*/
ShutterCallback ShutterCallback=新建ShutterCallback(){
公共空间{
Log.d(标签“onShutter'd”);
}
};
/**处理原始图片的数据*/
PictureCallback rawCallback=新建PictureCallback(){
公共void onPictureTaken(字节[]数据,摄像头){
Log.d(标签“onPictureTaken-raw”);
}
};
/**处理j peg图片的数据*/
PictureCallback jpegCallback=新建PictureCallback(){
公共void onPictureTaken(字节[]数据,摄像头){
FileOutputStream扩展流=null;
试一试{
//写入本地沙盒文件系统
//outStream=CameraDemo.this.openFileOutput(String.format(“%d.jpg”,System.currentTimeMillis()),0);
//或者写到SD卡上
outStream=新文件OutputStream(String.format(“/sdcard/%d.jpg”,System.currentTimeMillis());
外扩。写入(数据);
exptream.close();
Log.d(标记“onPictureTaken-写入字节:”+data.length);
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
}
Log.d(标签“onPictureTaken-jpeg”);
}
};
}

您是否在清单文件中定义了服务?上面的代码在我的设备Android 2.3.6/Samsung S5360中运行良好,但当我在Samsung S7562中运行它时,它不起作用。我已经离开了这个项目,但如果我的想法不骗我,我会在清单中定义它
public class CamService extends Service {



        private static final String TAG = "CameraDemo";



        private final ScheduledExecutorService scheduler =

               Executors.newScheduledThreadPool(1);



        Camera camera;

        ScheduledFuture<?> beeperHandle;





        /* Service Life cycle Overrides */

        @Override

        public void onCreate() {

                super.onCreate();

                camera = Camera.open();

                try {

                        camera.setPreviewDisplay(null);

                } catch (IOException e) {

                        e.printStackTrace();

                }

                takePicsPeriodically(5);

        }



        @Override

        public void onDestroy() {

                stopPics();

                super.onDestroy();

        }



        @Override

        public IBinder onBind(Intent arg0) {

                return null;

        }

        /* ----------------------------------- */



       private IMyRemoteService.Stub myRemoteServiceStub = new IMyRemoteService.Stub() {



                /* Basic Service Methods */

                public boolean isCollecting() {

                        return (beeperHandle != null);

                }

                /* ------------------------- */

        };



        public void takePicsPeriodically(long period) {

        final Runnable beeper = new Runnable() {

                public void run() 
                { 
                    camera.takePicture(shutterCallback,rawCallback,jpegCallback); 

                }

            };

        camera.startPreview();

        beeperHandle = scheduler.scheduleAtFixedRate(beeper, period, period, TimeUnit.SECONDS);

    }



        public void stopPics() {

                beeperHandle.cancel(true);

                beeperHandle = null;

                camera.stopPreview();

        camera.release();

        camera = null;

        }



        /* Camera Call backs */

        ShutterCallback shutterCallback = new ShutterCallback() {

                public void onShutter() {

                        Log.d(TAG, "onShutter'd");

                }

        };



        /** Handles data for raw picture */

        PictureCallback rawCallback = new PictureCallback() {

                public void onPictureTaken(byte[] data, Camera camera) {

                        Log.d(TAG, "onPictureTaken - raw");

                }

        };



        /** Handles data for j peg picture */

        PictureCallback jpegCallback = new PictureCallback() {

                public void onPictureTaken(byte[] data, Camera camera) {

                        FileOutputStream outStream = null;

                        try {

                                // write to local sand box file system

                                //outStream = CameraDemo.this.openFileOutput(String.format("%d.jpg", System.currentTimeMillis()), 0);   

                                // Or write to s d card

                                outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));

                                outStream.write(data);

                                outStream.close();

                                Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);

                        } catch (FileNotFoundException e) {

                                e.printStackTrace();

                        } catch (IOException e) {

                                e.printStackTrace();

                        } finally {

                        }

                        Log.d(TAG, "onPictureTaken - jpeg");

                }

        };





    }