android獲取相機
⑴ 如何在安卓應用中調用相機
相機使用基礎之 調用系統中的相機應用
通過Intent直接調用系統相機
直接調用系統的相機應用,只需要在Intent對象中傳入相應的參數即可,總體來說需要以下三步:
1. Compose a Camera Intent
MediaStore.ACTION_IMAGE_CAPTURE 拍照;
MediaStore.ACTION_VIDEO_CAPTURE錄像。
2. Start the Camera Intent
使用startActivityForResult()方法,並傳入上面的intent對象。
之後,系統自帶的相機應用就會啟動,用戶就可以用它來拍照或者錄像。
3. Receive the Intent Result
用onActivityResult()接收傳回的圖像,當用戶拍完照片或者錄像,或者取消後,系統都會調用這個函數。
關於接收圖像
如果不設置接收圖像的部分,拍照完畢後將會返回到原來的activity,相片會自動存儲在拍照應用的默認存儲位置。
為了接收圖像,需要做以下幾個工作:
1.指定圖像的存儲位置,一般圖像都是存儲在外部存儲設備,即SD卡上。
你可以考慮的標準的位置有以下兩個:
Environment.(Environment.DIRECTORY_PICTURES)
這個方法返回圖像和視頻的標准共享位置,別的應用也可以訪問,如果你的應用被卸載了,這個路徑下的文件是會保留的。
為了區分,你可以在這個路徑下為你的應用創建一個子文件夾。
Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
這個方法返回的路徑是和你的應用相關的一個存儲圖像和視頻的方法。
如果應用被卸載,這個路徑下的東西全都會被刪除。
這個路徑沒有什麼安全性限制,別的應用也可以自由訪問裡面的文件。
2.為了接收intent的結果,需要覆寫activity中的 onActivityResult() 方法。
前面說過,可以不設置相機返回的圖像結果的操作,此時在startActivityForResult()中不需要給intent傳入額外的數據,這樣在onActivityResult()回調時,返回的Intent data不為null,照片存在系統默認的圖片存儲路徑下。
但是如果想得到這個圖像,你必須制定要存儲的目標File,並且把它作為URI傳給啟動的intent,使用MediaStore.EXTRA_OUTPUT作為關鍵字。
這樣的話,拍攝出來的照片將會存在這個特殊指定的地方,此時沒有thumbnail會被返回給activity的回調函數,所以接收到的Intent data為null。
⑵ android 怎麼調用系統相機
這個很簡單的,網路到處都有答案:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private Button button;
private ImageView view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
view= (ImageView)findViewById(R.id.imageView1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
}
});
}
@SuppressLint("SdCardPath")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 檢測sd是否可用
Log.i("TestFile",
"SD card is not avaiable/writeable right now.");
return;
}
new DateFormat();
String name = DateFormat.format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA)) + ".jpg";
Toast.makeText(this, name, Toast.LENGTH_LONG).show();
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 獲取相機返回的數據,並轉換為Bitmap圖片格式
FileOutputStream b = null;
File file = new File("/sdcard/Image/");
file.mkdirs();// 創建文件夾
String fileName = "/sdcard/Image/"+name;
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把數據寫入文件
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try
{
view.setImageBitmap(bitmap);// 將圖片顯示在ImageView里
}catch(Exception e)
{
Log.e("error", e.getMessage());
}
}
}
}
⑶ android studio怎麼調用相機
android 調用系統相機解決方法:直接通過Intent調用系統相機
直接調用系統的相機應用,只需要在Intent對象中傳入相應的參數即可,總體來說需要以下三步:
1. Compose a Camera Intent
MediaStore.ACTION_IMAGE_CAPTURE 拍照;
MediaStore.ACTION_VIDEO_CAPTURE錄像。
2. Start the Camera Intent
使用startActivityForResult()方法,並傳入上面的intent對象。
之後,系統自帶的相機應用就會啟動,用戶就可以用它來拍照或者錄像。
3. Receive the Intent Result
用onActivityResult()接收傳回的圖像,當用戶拍完照片或者錄像,或者取消後,系統都會調用這個函數。
⑷ 如何打開相機許可權
開啟手機相機許可權步驟如下:
1、在手機中點擊「設置」 進入
5、手機開啟相機許可權步驟完成。
⑸ android 調用系統相機拍照獲取照片時,為什麼先跳到桌面,然後再回到調用相機的Activity
public static String getCapturePath(Activity activity) {
String path = getImageSavePath() + "/" + getTime("yyyyMMddHHmmss")
+ ".jpg";
Intent cameraintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraintent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(path)));
activity.startActivityForResult(cameraintent,
Constants.CAMERA_REQUEST_CODE);
return path;
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == Constants.CAMERA_REQUEST_CODE)
{
CameraManager.intance().compresImage();
return;
}
}
compresImage();這個方法是壓縮圖片
public void compresImage()
{
if (!new File(cameraPath).isFile()) {
return;
}
compresPath = AppTools.getImageCompresPath();
// 對圖片進行壓縮
ImageDispose.compressImage(cameraPath, compresPath, 450);
Bitmap bm = ImageDispose.rotate(BitmapFactory.decodeFile(compresPath));
if(view.getVisibility() == View.GONE){
view.setVisibility(View.VISIBLE);
}
view.setImageBitmap(bm);
view.invalidate();
view.setTag(compresPath);
}
⑹ 一個關於android的問題,我通過下面的方法調用相機,可是怎麼可以在拍照結束後獲取照片的路徑呢
Android調用系統拍照的代碼:
創建Intent Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String imagePath = Environment.getExternalStorageDirectory() + "/image" ;
設置文件路徑 File file = new File(imagePath);
if(!file.exists()){
file.mkdirs(); }
設置URI,指定相冊拍照後保存圖片的路徑,Uri imageUri = Uri.fromFile(new File(imagePath, "image.jsp"));
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(openCameraIntent, REQUEST_CODE_TAKING_PICTURES);
拍照完以後,文件就會保存在這個指定的目錄下了。Uri 里指定了相機拍照的路徑。
⑺ android系統如何調用自帶的相機相冊
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="gallery"
android:text="獲取圖庫圖片" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="camera"
android:text="拍照獲取圖片" />
<ImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
//------------------我的MainActivity --------------也很簡單--------------------------
package tackpicture.bwie.com.tackpicture;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private ImageView iv_image;
private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照
private static final int PHOTO_REQUEST_GALLERY = 2;// 從相冊中選擇
private static final int PHOTO_REQUEST_CUT = 3;// 結果
/* 頭像名稱 */
private static final String PHOTO_FILE_NAME = "temp_photo.jpg";
private File tempFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控制項
iv_image = (ImageView) findViewById(R.id.iv_image);
}
//圖庫
public void camera(View view) {
// 激活系統圖庫,選擇一張圖片
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
// 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_GALLERY
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
}
//相機
public void gallery(View view) {
// 激活相機
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 判斷存儲卡是否可以用,可用進行存儲
if (hasSdcard()) {
tempFile = new File(Environment.getExternalStorageDirectory(), PHOTO_FILE_NAME);
// 從文件中創建uri
Uri uri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
}
// 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_CAREMA
startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
}
/*
* 剪切圖片
*/
private void crop(Uri uri) {
// 裁剪圖片意圖
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 裁剪後輸出圖片的尺寸大小
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
intent.putExtra("outputFormat", "JPEG");// 圖片格式
intent.putExtra("noFaceDetection", true);// 取消人臉識別
intent.putExtra("return-data", true);
// 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_CUT
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}
/*
* 判斷sdcard是否被掛載
*/
private boolean hasSdcard() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PHOTO_REQUEST_GALLERY) {
// 從相冊返回的數據
if (data != null) {
// 得到圖片的全路徑
Uri uri = data.getData();
crop(uri);
}
} else if (requestCode == PHOTO_REQUEST_CAREMA) {
// 從相機返回的數據
if (hasSdcard()) {
crop(Uri.fromFile(tempFile));
} else {
Toast.makeText(MainActivity.this, "未找到存儲卡,無法存儲照片!", 0).show();
}
} else if (requestCode == PHOTO_REQUEST_CUT) {
// 從剪切圖片返回的數據
if (data != null) {
Bitmap bitmap = data.getParcelableExtra("data");
this.iv_image.setImageBitmap(bitmap);
}
try {
// 將臨時文件刪除
tempFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
⑻ android如何獲取相機解析度
安卓系統在獲取相機解析度時,可以參考SDK中的API,獲取相機的參數:
Camera.Parameters parameters = camera.getParameters();
獲取預覽的各種解析度:
List<Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes();
獲取攝像頭支持的各種解析度:
List<Size> supportedPictureSizes = parameters.getSupportedPictureSizes();
例如:獲取照相機參數,設置需要的參數,其餘預設
Camera camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
設置照片格式:
parameters.setPictureFormat(PixelFormat.JPEG);
設置預瀏尺寸,注意要在攝像頭支持的范圍內選擇:
parameters.setPreviewSize(WIDTH, HEIGHT);
設置照片解析度,注意要在攝像頭支持的范圍內選擇
parameters.setPictureSize(WIDTH, HEIGHT);
設置照相機參數:
camera.setParameters(parameters);
開始拍照:
camera.startPreview();
以上就是獲取相機解析度的步驟。