Android中本地圖片資源以及視頻錄音資源的擷取

來源:互聯網
上載者:User

標籤:

經常使用到本地圖片的擷取,還有錄音之類,所以就稍微整理了一下,模式都是差不多的,大家可以參考一下。
這裡寫代碼片package com.ly.day72_camera;

import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
* 拍照
* 從相簿擷取圖片
* 錄音
* 攝像
*/
public class MainActivity extends AppCompatActivity {
ImageView img;
public static final int TAKE_PHOTO = 1;//拍照後的結果
public static final int RESULT_PHOTO = 2;//裁剪後的結果
public static final int GET_PHOTO = 3;//相簿擷取的結果
public static final int GET_VOICE_CAMERA = 4;//擷取錄音的結果

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    img = (ImageView) findViewById(R.id.img);}/** * 按鈕事件的處理 * * @param view */public void btnClick(View view) {    switch (view.getId()) {        case R.id.btnTakePhoto: //拍照            takePhoto();            break;        case R.id.btnGetPhoto://從相簿擷取            getPhoto();            break;        case R.id.btnGetVoice://擷取錄音            getVoice();            break;        case R.id.btnGetVideo://擷取攝像            getVideo();            break;    }}/** * 擷取錄影 */private void getVideo() {    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);//品質 0無損    startActivityForResult(intent, GET_VOICE_CAMERA);}/** * 擷取系統錄音 */private void getVoice() {    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);    intent.setType("audio/amr");    intent.setClassName("com.android.soundrecorder", "com.android.soundrecorder.SoundRecorder");    startActivityForResult(intent, GET_VOICE_CAMERA);}/** * 擷取從相簿圖片 */private void getPhoto() {    Intent intent = new Intent(Intent.ACTION_PICK, null);    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");//查詢類型    startActivityForResult(intent, GET_PHOTO);}/** * 拍照 */private void takePhoto() {    //開啟相機的Action    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    //該參數是拍照以後儲存的路徑    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "tmp.jpg")));    startActivityForResult(intent, TAKE_PHOTO);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    switch (requestCode) {        case TAKE_PHOTO://拍照返回的回呼函數            File file = new File(Environment.getExternalStorageDirectory(), "tmp.jpg");            Log.i("info", "----------" + file.getPath());            startZoom(Uri.fromFile(file));            break;        case RESULT_PHOTO://裁剪過後的圖片傳回值            Bundle bundle = data.getExtras();            Bitmap bitmap = bundle.getParcelable("data"); //擷取返回的圖片            try {                //儲存到本地                FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/tmp1.jpg");                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);                img.setImageBitmap(bitmap);            } catch (FileNotFoundException e) {                e.printStackTrace();            }            break;        case GET_PHOTO://相簿裡面擷取圖片            startZoom(data.getData());            break;        case GET_VOICE_CAMERA://擷取錄音,或者攝像(因為處理方式相同)            Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null);            while (cursor.moveToNext()) {                //擷取錄音或者視頻的儲存路徑                String path = cursor.getString(cursor.getColumnIndex("_data"));                Toast.makeText(MainActivity.this, path, Toast.LENGTH_SHORT).show();            }            break;    }}/** * 裁剪圖片 * * @param uri */private void startZoom(Uri uri) {    Intent intent = new Intent("com.android.camera.action.CROP");//開啟要裁剪的頁面    intent.setDataAndType(uri, "image/*");//裁剪的圖片,和圖片類型    intent.putExtra("aspectX", 1);  //表示裁剪圖片的寬高比例    intent.putExtra("aspectY", 1);  //表示裁剪圖片的寬高比例    intent.putExtra("outputX", 300);//表示裁剪出來縮圖的寬高    intent.putExtra("outputY", 300);//表示裁剪出來縮圖的寬高    intent.putExtra("crop", true);//表示是否需要裁剪    intent.putExtra("return-data", true);//表示返回裁剪後的圖片    startActivityForResult(intent, RESULT_PHOTO);}/** * 擷取圖片路徑 * * @param originalUri * @return */private String getPath(Uri originalUri) {    String[] proj = {MediaStore.Images.Media.DATA};    //android多媒體資料庫的封裝介面    Cursor cursor = getContentResolver().query(originalUri, proj, null, null, null);    //按我個人理解 這個是獲得使用者選擇的圖片的索引值    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);    //將游標移至開頭 ,這個很重要,不小心很容易引起越界    cursor.moveToFirst();    //最後根據索引值擷取圖片路徑    String path = cursor.getString(column_index);    return path;}

}

Android中本地圖片資源以及視頻錄音資源的擷取

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.