Android相机意图

新手上路,请多包涵

我需要将意图推送到默认相机应用程序以使其拍照、保存并返回 URI。有没有办法做到这一点?

原文由 Alexander Oleynikov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 672
2 个回答
private static final int TAKE_PICTURE = 1;
private Uri imageUri;

public void takePhoto(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File photo = new File(Environment.getExternalStorageDirectory(),  "Pic.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.fromFile(photo));
    imageUri = Uri.fromFile(photo);
    startActivityForResult(intent, TAKE_PICTURE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case TAKE_PICTURE:
        if (resultCode == Activity.RESULT_OK) {
            Uri selectedImage = imageUri;
            getContentResolver().notifyChange(selectedImage, null);
            ImageView imageView = (ImageView) findViewById(R.id.ImageView);
            ContentResolver cr = getContentResolver();
            Bitmap bitmap;
            try {
                 bitmap = android.provider.MediaStore.Images.Media
                 .getBitmap(cr, selectedImage);

                imageView.setImageBitmap(bitmap);
                Toast.makeText(this, selectedImage.toString(),
                        Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
                        .show();
                Log.e("Camera", e.toString());
            }
        }
    }
}

原文由 Alexander Oleynikov 发布,翻译遵循 CC BY-SA 3.0 许可协议

通过intent调用摄像头,抓拍图片,本地保存在图库中。

 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                someActivityResultLauncher.launch(cameraIntent);}


    @Override
    public void onActivityResult(ActivityResult result) {
        if (result.getResultCode() == RESULT_OK) {
            bitmap = (Bitmap) Objects.requireNonNull(result.getData()).getExtras().get("data");
        }
        imageView.setImageBitmap(bitmap);
        saveimage(bitmap);
     }

 private void saveimage(Bitmap bitmap){
     Uri images;
     ContentResolver contentResolver = getContentResolver();

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
         images = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
     }else {
         images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
     }
     ContentValues contentValues = new ContentValues();
     contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, System.currentTimeMillis() +".jpg");
     contentValues.put(MediaStore.Images.Media.MIME_TYPE, "images/*");
     Uri uri = contentResolver.insert(images, contentValues);
     try {
         OutputStream outputStream = contentResolver.openOutputStream(Objects.requireNonNull(uri));
         bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
         Objects.requireNonNull(outputStream);

        //

     }catch (Exception e){
        //
         e.printStackTrace();

     }
 }

原文由 user19841100 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏