国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

安卓判斷系統相機授權狀態以及調用系統相機

2019-11-07 23:55:52
字體:
來源:轉載
供稿:網友

1、在項目中有可能使用到系統的相機,以及根據授權狀態做相應的處理, 2、在一開始我的項目里面沒有判斷相機的授權狀態,直接就調用了系統的相機功能,但是當我拒絕了授權使用相機之后,項目仍然可以調用相機并且可以正常使用(如果是自定義打開相機的話,可能會崩掉),但是考慮到用戶體驗,還是需要判斷一下授權狀態,沒有授權的話,就不用調用相機,下面是我的代碼,在這里備份一下:

3、判斷系統相機的授權狀態和打開系統相機

/** * 啟動相機,使用系統路徑存儲圖片(不需要自定義路徑,默認為Environment.DIRECTORY_PICTURES) * 返回存儲路徑 /storage/emulated/0/Pictures/1487908088865.jpg */ PRivate String startCameraWithSystemPath(Activity activity, int requestCode) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { /* * @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_TAKE_PHOTO_PERMISSION) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //申請成功,可以拍照 } else { Toast.makeText(this, "CAMERA PERMISSION DENIED", Toast.LENGTH_SHORT).show(); } return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } * */ // 沒有授權,可用申請授權或者提示信息 // 申請權限,REQUEST_CODE是自定義的常量,如果申請授權的話,需要重寫上面的onRequestPermissionsResult方法,但是好像不怎么管用(沒準確測試) // ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE); Log.d("111", "沒有授權,請到應用設置界面手動打開權限"); return null; } else { // 已經權限 Log.d("111", "已經授權"); // 獲得sd卡的狀態信息 String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { // SDK可用 Intent intent = new Intent(); // 指定開啟系統相機的Action intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); File publicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 獲取系統SDK公共的文件夾路徑 if (!publicDirectory.exists()) { publicDirectory.mkdirs(); } File saveFile = new File(publicDirectory, System.currentTimeMillis() + ".jpg"); // 拼接存儲文件路徑 // 把文件地址轉換成Uri格式 Uri uri = Uri.fromFile(saveFile); Log.d("111", "getAbsolutePath=" + saveFile.getAbsolutePath()); // 設置系統相機拍攝照片完成后圖片文件的存放地址 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); // 此值在最低質量最小文件尺寸時是0,在最高質量最大文件尺寸時是1 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); activity.startActivityForResult(intent, requestCode); return saveFile.getAbsolutePath(); // 返回絕對路徑(系統路徑) } else { // SDK不可用 Toast.makeText(activity, "請確認已經插入SD卡", Toast.LENGTH_LONG).show(); return null; } } }

調用方法獲取圖片的存儲路徑

private final static int REQUEST_CAMERA_CAPTURE_CODE = 3; // 相機回調codeprivate String cameraPath; // 存儲路徑// 調用cameraPath = startCameraWithSystemPath(MainActivity.this,REQUEST_CAMERA_CAPTURE_CODE); // 系統路徑

REQUEST_CAMERA_CAPTURE_CODE是自己定義的一個常量,用于標示activity,在調用系統相機之后,可以在回調函數中獲得圖片路徑:

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // requestCode:可以通過resultCode來判斷是哪一個activity的返回結果 if (resultCode == Activity.RESULT_OK) { if (requestCode == REQUEST_CAMERA_CAPTURE_CODE) { // 打開相機 Log.d("111", "path=" + cameraPath); Uri uri = Uri.fromFile(new File(cameraPath)); imageView.setImageURI(uri); } else if (requestCode == REQUEST_IMAGE_CAPTURE_CODE) { // 打開相冊 try { Uri uri = data.getData(); String path = uri.getPath(); String last = uri.getLastPathSegment();// final String absolutePath= getAbsolutePath(mActivity, uri); Log.d("111", "uri=" + uri); Log.d("111", "path=" + path + ",last=" + last); imageView.setImageURI(uri); } catch (Exception e) { e.printStackTrace(); } } } }

4、打開系統相冊,同樣在 public void onActivityResult(int requestCode, int resultCode, Intent data) {}中回調

public final static int REQUEST_IMAGE_CAPTURE_CODE = 1; // 相冊回調code// 調用startPhotoLibrary(REQUEST_IMAGE_CAPTURE_CODE); /* * 打開相冊 * */ private void startPhotoLibrary(int requestCode) { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, requestCode); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 竹山县| 林甸县| 雅安市| 甘洛县| 白水县| 大姚县| 托里县| 井冈山市| 通海县| 师宗县| 连平县| 台北市| 嘉义县| 册亨县| 永泰县| 安新县| 百色市| 洪湖市| 锡林郭勒盟| 射阳县| 贡觉县| 三明市| 丹棱县| 江西省| 湖州市| 顺义区| 永吉县| 永丰县| 洪洞县| 泰和县| 汤原县| 出国| 武隆县| 内乡县| 乐亭县| 小金县| 巴青县| 安西县| 闻喜县| 诸暨市| 大名县|