android不知不觉偷拍他人功能实现(手机关闭依然拍照)

来源:互联网 发布:java web前端开发工具 编辑:程序博客网 时间:2024/04/26 05:57
    private static int number = 0;    private static boolean clearVoice = false;    private Intent intent;    private InitTimetoTakePic(Context context) {        this.mContext = context;    }    public synchronized static InitTimetoTakePic getInstance(Context context) {        mInstance = null;        mInstance = new InitTimetoTakePic(context);        return mInstance;    }    public void initView(FrameLayout surfaceViewFrame) {        mSurfaceViewFrame = surfaceViewFrame;    }    /**     * 启动定时拍照并上传功能     */    Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case 1:                    LogUtils.v("开始拍照");                    initCarema();                    break;                case 2:                    if (mCamera == null) {                        releaseCarema();                        number = 0;                        mHandler.removeCallbacksAndMessages(null);                    } else {                        if (number < Integer.valueOf(cameraStop)) {                            mCamera.autoFocus(new AutoFocusCallback() {                                @Override                                public void onAutoFocus(boolean success, Camera camera) {                                    // 从Camera捕获图片                                    LogUtils.v("自动聚焦111" + success);                                    try {                                        mCamera.takePicture(null, null, mPicture);                                        mHandler.sendEmptyMessageDelayed(1, Integer.valueOf(cameraNumber) * 1000);                                    } catch (Exception e) {                                        releaseCarema();                                        mHandler.removeCallbacksAndMessages(null);                                    }                                }                            });                        } else {                            releaseCarema();                            number = 0;                            mHandler.removeCallbacksAndMessages(null);                        }                    }                    break;            }        }    };    public void start() {        mHandler.sendEmptyMessageDelayed(1, 1 * 1000); //7s 后开始启动相机    }    private void initCarema() {        LogUtils.v("initCarema");        if (mCamera == null) {            LogUtils.v("camera=null");            mCamera = getCameraInstance();            mPreview = new CameraPreview(mContext, mCamera);            mSurfaceViewFrame.removeAllViews();            mSurfaceViewFrame.addView(mPreview);        }        LogUtils.v(mCamera == null ? "mCamera is null" : "mCamera is not null");        mCamera.startPreview();        mHandler.sendEmptyMessageDelayed(2, Integer.valueOf(cameraStart) * 1000); //3s后拍照    }    /**     * 检测设备是否存在Camera硬件     */    private boolean checkCameraHardware(Context context) {        if (context.getPackageManager().hasSystemFeature(                PackageManager.FEATURE_CAMERA)) {            // 存在            return true;        } else {            // 不存在            return false;        }    }    /**     * 打开一个Camera     */    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)    public static Camera getCameraInstance() {        Camera c = null;        try {            c = Camera.open(cameraType);            c.setDisplayOrientation(90);            Camera.Parameters mParameters = c.getParameters();            //快门声音            c.enableShutterSound(clearVoice);            //可以用得到当前所支持的照片大小,然后            //List<Size> ms = mParameters.getSupportedPictureSizes();            //mParameters.setPictureSize(ms.get(0).width, ms.get(0).height);  //默认最大拍照取最大清晰度的照片            String[] xes = resolutionString.split("x");            // LogUtils.i("ms.get(0).width==>"+ms.get(0).width);            // LogUtils.i("ms.get(0).height==>"+ms.get(0).height);            // LogUtils.i("Integer.valueOf(xes[0])==>"+Integer.valueOf(xes[0]));            // LogUtils.i("Integer.valueOf(xes[1])==>"+Integer.valueOf(xes[1]));            mParameters.setPictureSize(Integer.valueOf(xes[0]), Integer.valueOf(xes[1]));  //默认最大拍照取最大清晰度的照片            c.setParameters(mParameters);        } catch (Exception e) {            LogUtils.v("打开Camera失败失败");        }        return c;    }    private PictureCallback mPicture = new PictureCallback() {        @Override        public void onPictureTaken(byte[] data, Camera camera) {            // 获取Jpeg图片,并保存在sd卡上            String path = saveLocation;            File dirF = new File(path);            if (!dirF.exists()) {                dirF.mkdirs();            }            File pictureFile = new File(path + "/" + System.currentTimeMillis() + "." + extension);//扩展名            try {                FileOutputStream fos = new FileOutputStream(pictureFile);                fos.write(data);                fos.close();                LogUtils.v("保存图成功");                number++;                intent = new Intent();                intent.setAction("CameraFragment.start");                intent.putExtra("number", number);                mContext.sendBroadcast(intent);            } catch (Exception e) {                LogUtils.v("保存图片失败");                e.printStackTrace();            }            releaseCarema();        }    };    public void releaseCarema() {        if (mCamera != null) {            mCamera.stopPreview();            mCamera.release();            mCamera = null;        }    }}

记得配置权限等

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.ddv.www.candidphotodemo">    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />    <uses-permission android:name="android.permission.GET_TASKS" />    <uses-feature android:name="android.hardware.camera" />    <uses-feature android:name="android.hardware.camera.autofocus" />    <uses-permission android:name="android.permission.CAMERA"></uses-permission>    <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <service android:name=".PhotoWindowService" />    </application></manifest>

demo下载地址:http://download.csdn.net/download/huangxiaoguo1/9711899

有什么不足,望大家指教,谢谢….

0 0
原创粉丝点击