Android--呼叫相機拍照(支援到8.0)
阿新 • • 發佈:2019-01-24
import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.PersistableBundle; import android.provider.MediaStore; import android.support.annotation.Nullable; import com.vm.shadowsocks.utils.MakeFile; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; /** * 拍照 */ public class photoActivity extends Activity { private static Uri imageUri; public static final int PHOTO_REQUEST_CAREMA = 1;// 拍照 public static File tempFile; @Override public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PHOTO_REQUEST_CAREMA: if (resultCode == RESULT_OK) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(imageUri, "image/*"); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); } break; } } public static void openCamera(Activity activity) { //獲取系統版本 int currentapiVersion = android.os.Build.VERSION.SDK_INT; // 啟用相機 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 判斷儲存卡是否可以用,可用進行儲存 if (hasSdcard()) { SimpleDateFormat timeStampFormat = new SimpleDateFormat( "yyyy_MM_dd_HH_mm_ss"); String filename = timeStampFormat.format(new Date()); MakeFile.makeRootDirectory(Environment.getExternalStorageDirectory().getPath()+ "/Android/photo"); tempFile = new File(Environment.getExternalStorageDirectory().getPath()+ "/Android/photo", filename + ".jpg"); if (currentapiVersion < 24) { // 從檔案中建立uri imageUri = Uri.fromFile(tempFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); } else { //相容android7.0 使用共享檔案的形式 ContentValues contentValues = new ContentValues(1); contentValues.put(MediaStore.Images.Media.DATA, tempFile.getAbsolutePath()); // //檢查是否有儲存許可權,以免崩潰 // if (ContextCompat.checkSelfPermission(photoActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) // != PackageManager.PERMISSION_GRANTED) { // //申請WRITE_EXTERNAL_STORAGE許可權 //// Toast.makeText(this,"請開啟儲存許可權",Toast.LENGTH_SHORT).show(); // return; // } imageUri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); } } // 開啟一個帶有返回值的Activity,請求碼為PHOTO_REQUEST_CAREMA activity.startActivityForResult(intent, PHOTO_REQUEST_CAREMA); } /* * 判斷sdcard是否被掛載 */ public static boolean hasSdcard() { return Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); } }
呼叫方法:
photoActivity.openCamera(this);
記得新增讀寫許可權和註冊activity。