Android摄像头 怎么搞?

来源:互联网 发布:fifaonline3古利特数据 编辑:程序博客网 时间:2024/04/29 20:51

1.如何启动摄像头

调用系统隐式意图,若只有内置相机app则立即调用,若有多个相机app则弹出选择菜单。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivity(intent);

2.如何使我们的应用捕获ACTION_IMAGE_CAPTURE意图。

<activity    android:name="tr.nuctech.com.tr0100.Activity.CameraActivity"    android:label="@string/title_activity_camera"    android:theme="@style/AppTheme.NoActionBar">    <intent-filter>        <action android:name="android.media.action.IMAGE_CAPTURE" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>
3.如何使用系统摄像头拍照返回的照片(缩略图)?


Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent,REQUEST_SHOT);
---------拍照成功返回的resultCode 是RESULT_OK

 if(resultCode==RESULT_OK){    if(requestCode==REQUEST_SHOT)    {        Bundle bundle=data.getExtras();        Bitmap bitmap = (Bitmap) bundle.get("data");        id_userphoto.setImageBitmap(bitmap);    }
可以从Intent中获取data 不过这个图片是缩略图哦!

4.如何使用系统摄像头拍照返回真实的照片呢?

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

Uri photouri = Uri.fromFile(new File(mPicturePath));//记得添加sd卡读写权限intent.putExtra(MediaStore.EXTRA_OUTPUT, photouri);//对系统拍照存储进行更改startActivityForResult(intent,REQUEST_SHOT2);
--------那就是改变系统拍照存储路径为你自定义的路径哦

if (requestCode == REQUEST_SHOT2) {    FileInputStream fileInputStream=null;    try {        fileInputStream= new FileInputStream(mPicturePath);        Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream);        id_userphoto.setImageBitmap(bitmap);    } catch (FileNotFoundException e) {        e.printStackTrace();    }    finally {        try {            fileInputStream.close();        } catch (IOException e) {            e.printStackTrace();        }    }}
然后再去从那个路径读取真实的皂片~你懂得!

问题:1.强制启动系统相机却未找到系统相机对应的包名。。。

2.如果开发商删除系统相机自己搞一套 那么就无法做适配,而且相机可能不能满足客户需求,所以定制一套自己的相机最为靠谱!有空再写~

群里的网友给了一个方法 可以获取所有系统预装的app的信息

private List<PackageInfo> getAllApps (Context activity){    List<PackageInfo> apps = new ArrayList<PackageInfo>();    PackageManager pManager = activity.getPackageManager();    //获取手机内所有应用    List<PackageInfo> paklist = pManager.getInstalledPackages(0);    for (int i = 0; i < paklist.size(); i++) {        PackageInfo pak = (PackageInfo) paklist.get(i);        //判断系统预装的应用程序        if (!((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0)) {            apps.add(pak);        }    }    return apps;}
用下面代码来找包名 很不幸的是 仍然没有找到~

PackageManager pManager = this.getPackageManager();List<PackageInfo> appList = getAllSysApps(this);String packagename;for (int i = 0; i < appList.size(); i++) {    PackageInfo pinfo = appList.get(i);    //set Application Name    if (("相机").equals(pManager.getApplicationLabel(pinfo.applicationInfo).toString())) {        packagename = pinfo.packageName;        Log.i("PictureChooseActivity", "packagename:" + packagename);    }    final Intent intent = new Intent();    final Intent intent_camera = getPackageManager()            .getLaunchIntentForPackage("com.android.camera");    if (intent_camera != null) {        intent.setPackage("com.android.camera");    }    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);    startActivityForResult(intent, REQUEST_SHOT);    return true;}
狗台电 你牛逼~

逼老子自己写一个!

代码参考慕课网

package tr.nuctech.com.tr0100.Activity;import android.content.DialogInterface;import android.content.Intent;import android.graphics.ImageFormat;import android.hardware.Camera;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import com.example.com.qqslidingmenu.R;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;//需要声明相机使用权限 android.permission.CAMERApublic class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback {    private Camera mCamera;    private SurfaceView mPreview;    private SurfaceHolder mHolder;    private FloatingActionButton id_capture_btn;    private String TAG = "CameraActivity";    private  AlertDialog.Builder builder ;    private String mPicturePath;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_camera);        Intent intent = getIntent();        if(intent!=null)        {            mPicturePath=  intent.getStringExtra("picturepath");        }        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        mPreview = (SurfaceView) findViewById(R.id.id_preview);        mPreview.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mCamera.autoFocus(null);            }        });        mHolder = mPreview.getHolder();        mHolder.addCallback(this);        builder = new AlertDialog.Builder(this);        builder.setMessage("确认使用该照片?");        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {                setResult(RESULT_OK);                finish();            }        });        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {                mCamera.stopPreview();                mCamera.startPreview();            }        });    }    @Override    protected void onResume() {        super.onResume();        if (mCamera == null)            mCamera = getCamera();        if (mHolder != null && mCamera != null)            setStartPreview(mCamera, mHolder);    }    @Override    protected void onDestroy() {        super.onDestroy();        releaseCamera();    }    /*    * 拍照功能    * */    public void capture(View view) {        Camera.Parameters parameters = mCamera.getParameters();        parameters.setPictureFormat(ImageFormat.JPEG);        parameters.setPreviewSize(800, 400);        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦        mCamera.autoFocus(new Camera.AutoFocusCallback() {            @Override            public void onAutoFocus(boolean b, Camera camera) {                if (b) {                    mCamera.takePicture(null, null, new Camera.PictureCallback() {                        @Override                        public void onPictureTaken(byte[] bytes, Camera camera) {                            File tempFIle = new File(mPicturePath);                            try {                                FileOutputStream fileOutputStream = new FileOutputStream(tempFIle);                                fileOutputStream.write(bytes);                                fileOutputStream.close();                                builder.show();                            } catch (FileNotFoundException e) {                                e.printStackTrace();                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                    });                }            }        });    }    /*    * 获取Camera对象    * */    private Camera getCamera() {        Camera camera;        try {            camera = Camera.open();        } catch (Exception e) {            camera = null;            e.printStackTrace();        }        return camera;    }    /*    * 开始预览相机内容    * */    private void setStartPreview(Camera camera, SurfaceHolder surfaceHolder) {        try {            camera.setPreviewDisplay(surfaceHolder);            camera.startPreview();//默认为横屏 下面为旋转90度为竖屏//            camera.setDisplayOrientation(90);        } catch (IOException e) {            e.printStackTrace();        }    }    /*    * 释放相机资源    * */    private void releaseCamera() {        if (mCamera != null) {            mCamera.setPreviewCallback(null);            mCamera.stopPreview();            mCamera.release();            mCamera = null;        }    }    @Override    public void surfaceCreated(SurfaceHolder surfaceHolder) {        Log.i(TAG, "surfaceCreated");        setStartPreview(mCamera, mHolder);    }    @Override    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {        Log.i(TAG, "surfaceChanged");        mCamera.stopPreview();        setStartPreview(mCamera, mHolder);    }    @Override    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {        Log.i(TAG, "surfaceDestroyed");        releaseCamera();    }}
上一个activity 给他传了一个路径 确认result_ok 后 给MainActivity 返回路径 MainActicity加载存储在SD卡上的图片。

0 0