1)打开【相机】应用,进入相机界面后,按住任意位置往左边滑动切换界面。(如下图)
2)这时会进入相机设置界面,点击【熄屏快拍】,选择需要的模式就可以了。(如下图)
首先看一下界面,很简单
配置读取内存卡和调用照相头的功能
代码如下 | 复制代码 |
<!-- 使用网络权限 --> < uses-permission android:name = "android.permission.INTERNET" /> <!-- 写sd卡的权限 --> < uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 读sd卡权限 --> < uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" /> < uses-permission android:name = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> |
下面是代码的主题
代码如下 | 复制代码 |
publicclassTakePhotosextendsActivityimplements android.view.View.OnClickListener { Button takePhoto; Bitmap photo; String picPath; Button capture; @Override protectedvoidonCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_photo); takePhoto = (Button) findViewById(R.id.button1); capture = (Button) findViewById(R.id.capture); takePhoto.setOnClickListener(this); capture.setOnClickListener(this); } @Override publicvoidonClick(View viewid) { switch(viewid.getId()) { caseR.id.button1: {// 打开相机 String state = Environment.getExternalStorageState();// 获取内存卡可用状态 if(state.equals(Environment.MEDIA_MOUNTED)) { // 内存卡状态可用 Intent intent =newIntent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent,1); }else{ // 不可用 Toast.makeText(TakePhotos.this,"内存不可用", Toast.LENGTH_LONG) .show(); } break; } caseR.id.capture: {// 打开相册 // 打开本地相册 Intent i =newIntent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); // 设定结果返回 startActivityForResult(i,2); break; } default: break; } }
@Override protectedvoidonActivityResult(intrequestCode,intresultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(data !=null) { switch(requestCode) { case1: // 两种方式 获取拍好的图片 if(data.getData() !=null|| data.getExtras() !=null) {// 防止没有返回结果 Uri uri = data.getData(); if(uri !=null) { this.photo = BitmapFactory.decodeFile(uri.getPath());// 拿到图片 } if(photo ==null) { Bundle bundle = data.getExtras(); if(bundle !=null) { photo = (Bitmap) bundle.get("data"); FileOutputStream fileOutputStream =null; try{ // 获取 SD 卡根目录 生成图片并 String saveDir = Environment .getExternalStorageDirectory() +"/dhj_Photos"; // 新建目录 File dir =newFile(saveDir); if(!dir.exists()) dir.mkdir(); // 生成文件名 SimpleDateFormat t =newSimpleDateFormat( "yyyyMMddssSSS"); String filename ="MT"+ (t.format(newDate())) +".jpg"; // 新建文件 File file =newFile(saveDir, filename); // 打开文件输出流 fileOutputStream =newFileOutputStream(file); // 生成图片文件 this.photo.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream); // 相片的完整路径 this.picPath = file.getPath(); ImageView imageView = (ImageView) findViewById(R.id.imageView1); imageView.setImageBitmap(this.photo); }catch(Exception e) { e.printStackTrace(); }finally{ if(fileOutputStream !=null) { try{ fileOutputStream.close(); }catch(Exception e) { e.printStackTrace(); } } } Toast.makeText(getApplicationContext(),"获取到了", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getApplicationContext(),"找不到图片", Toast.LENGTH_SHORT).show(); } } } break; case2: { //打开相册并选择照片,这个方式选择单张 // 获取返回的数据,这里是android自定义的Uri地址 Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; // 获取选择照片的数据视图 Cursor cursor = getContentResolver().query(selectedImage, filePathColumn,null,null,null); cursor.moveToFirst(); // 从数据视图中获取已选择图片的路径 intcolumnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); // 将图片显示到界面上 ImageView imageView = (ImageView) findViewById(R.id.imageView1); imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); break; } default: break; } } } } |
注释的很详细,自己分析吧。