Android摄像头 怎么搞?

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.CAMERA
public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值