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;}狗台电 你牛逼~
逼老子自己写一个!
代码参考慕课网
上一个activity 给他传了一个路径 确认result_ok 后 给MainActivity 返回路径 MainActicity加载存储在SD卡上的图片。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(); }}
0 0
- Android摄像头 怎么搞?
- Android 代码混淆怎么搞啊
- 怎么搞的?
- 大数据,怎么搞?
- 大数据,怎么搞?
- 大数据,怎么搞?
- 怎么搞积分
- Android摄像头非全屏预览,怎么保证图像不变形
- 【Win7摄像头怎么打开?】
- 这个blog怎么搞的?
- 怎么才能多搞积分?
- 搞不懂怎么有积分
- 积分怎么搞的啊?
- 大学是怎么搞的?
- 郁闷,动画到底怎么搞
- VS2008 VC++ 怎么搞的
- Android摄像头
- 摄像头 android
- Android TabHost取消默认加载第一个tab的问题
- js请求webservice服务
- java 包装类
- 调用一个UITableview的一个代理的方法,实现UITableview重载
- 机器学习--岭回归与偏最小二乘
- Android摄像头 怎么搞?
- 数据库读写分离的性能分析
- 利用mmSeg4j分词实现网页文本倾向性分析
- Win7/Win10下的进程操作
- JS 跳转到指定链接
- linux下QT初试
- Assembly x64 Intro - SSE2 4x4D Transpose
- Title_消息加解密(java版)
- OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)