`

调用摄像机和相册

 
阅读更多

调用摄像机

目标: 调用摄像机,并将结果显示在界面上

 

步骤:

1.声明一个图片资源路径

 

private Uri imageUri;

2.在layout.xml中创建一个ImageView,用来显示图片,并在AndroidManifest.xml中申请sdcard权限,用于保存拍摄的照片

    

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

3.在onCreate()中创建一个图片文件,并获取路径

imageView=(ImageView)findViewById(R.id.imageView);
imageUri=Uri.fromFile(new File(getExternalCacheDir(),"test.jpg"));

 

4.在按钮的点击事件中,启动摄像机,并保存拍摄结果

Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
   intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
   startActivityForResult(intent,1);

 

5.在onActivityResult回调方法中,将照片显示出来

 

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        //将.jpg解析成bitmap对象
        Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
        imageView.setImageBitmap(bitmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

 

调用相册

1.因为图片在sdcard中,所以要申请权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

2.在主线程中启动相册

Intent intent = new Intent("android.intent.action.GET_CONTENT");
intent.setType("image/*");
startActivityForResult(intent, 1); // 打开相册

 

3.如果要在相册选择图片,并显示在ImageView上

    在4.4以下系统,使用以下代码

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    handleImageBeforeKitKat(data);

}


private void handleImageBeforeKitKat(Intent data) {
    Uri uri = data.getData();
    String imagePath = getImagePath(uri, null);
    displayImage(imagePath);
}

private String getImagePath(Uri uri, String selection) {
    String path = null;
    // 通过Uri和selection来获取真实的图片路径
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        }
        cursor.close();
    }
    return path;
}

private void displayImage(String imagePath) {
    if (imagePath != null) {
        Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
        picture.setImageBitmap(bitmap);
    } else {
        Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show();
    }
}

 

   在4.4以上系统,使用以下代码

private void handleImageOnKitKat(Intent data) {
    String imagePath = null;
    Uri uri = data.getData();
    if (DocumentsContract.isDocumentUri(this, uri)) {
        // 如果是document类型的Uri,则通过document id处理
String docId = DocumentsContract.getDocumentId(uri);
        if("com.android.providers.media.documents".equals(uri.getAuthority())) {
            String id = docId.split(":")[1]; // 解析出数字格式的id
String selection = MediaStore.Images.Media._ID + "=" + id;
            imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
        } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
            Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId));
            imagePath = getImagePath(contentUri, null);
        }
    } else if ("content".equalsIgnoreCase(uri.getScheme())) {
        // 如果是content类型的Uri,则使用普通方式处理
imagePath = getImagePath(uri, null);
    } else if ("file".equalsIgnoreCase(uri.getScheme())) {
        // 如果是file类型的Uri,直接获取图片路径即可
imagePath = uri.getPath();
    }
    displayImage(imagePath); // 根据图片路径显示图片
}

private String getImagePath(Uri uri, String selection) {
    String path = null;
    // 通过Uri和selection来获取真实的图片路径
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        }
        cursor.close();
    }
    return path;
}

private void displayImage(String imagePath) {
    if (imagePath != null) {
        Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
        picture.setImageBitmap(bitmap);
    } else {
        Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show();
    }
}

 

分享到:
评论

相关推荐

    h5页面调用相机、相册、录像、录音

    移动端浏览器和手机APP,h5页面调用相机、相册、录像、录音,可以选择本地相册;以及文件的读取和加载方法, 调用FileReader对象的方法

    unity摄像机和相册插件

    "Unity摄像机和相册插件"就是针对这一需求设计的解决方案。 该插件主要适用于Unity5.0及以上版本,这意味着它已经过时,因为当前Unity的稳定版本已经更新到2021.x系列。尽管如此,对于仍在使用较旧Unity版本的...

    调取相机相册

    android 调用系统相机相册兼容7.0

    Unity3d调用IOS相册,对照片进行剪裁

    以上就是如何在Unity3D 2018.3.0中调用iOS相册并剪裁图片的基本步骤和关键知识点。在实际开发过程中,可能还需要根据具体需求对代码进行调整和优化,确保功能的稳定性和性能。记住,始终要遵循苹果的App Store审核...

    Qt调用原生安卓照相机

    通过以上步骤,你就可以在Qt应用中实现调用原生安卓照相机的功能,包括拍照、摄像、打开相册以及播放视频。这种方式既保留了Qt的跨平台特性,又充分利用了Android系统的原生能力,提高了用户体验。在实际开发中,你...

    Unity调用Android/IOS系统相册、摄像机,选取后可以裁剪(Demo)

    最新版,Unity调用Android/IOS系统相册、摄像机,选取后可以裁剪(Demo)

    iPhone调用相机或者打开相册获取图片

    iPhone 调用相机或者打开相册获取图片 本篇文章主要讲解了在 iPhone 中如何调用相机或者打开相册获取图片,并可以设置压缩比。通过本文,你将了解到如何使用 UIImagePickerController 获取图片,并进行裁剪处理。 ...

    Qt for Android 调用原生系统摄像头进行录像并保存输出

    在Android平台上开发应用程序时,Qt框架提供了一个强大的跨平台解决方案,允许开发者使用相同的代码库在多个...通过合理的代码设计和充分的测试,开发者可以构建出高效且稳定的摄像录音功能,适用于多种Android设备。

    android调用系统拍照

    拍照或者从相册中选择图片后,我们都可以直接或间接的得到Uri或源文件。 通过`imageView.setImageUri(uri)`不会引发图片方向不正确的问题。 但是通过`BitmapFactory.decodeFile&#40;&#41;;`将源文件解析成Bitmap后再...

    Android实现调用系统相册和拍照的Demo示例

    在Android应用开发中,调用系统相册和拍照是常见的功能需求,允许用户选择或拍摄图片以便在应用中使用。本篇文章将详细讲解如何在Android中实现这两个功能,并提供一个完整的、无bug的Demo示例。 首先,让我们讨论...

    Android 中二维码扫描识别以及调用相册里面的二维码图片识别的效果

    基于google Zxing实现二维码的生成,识别和长按识别的效果,仿微信选择相册里的二维码图片直接识别的效果 ,选择相册在主页面点击打开摄像机进行扫描,进入扫描页面,在里面有选择相册的选项,直接点击就可以调用相册

    Android实现调用摄像头和相册的方法

    在Android应用开发中,调用摄像头和相册是常见的功能,允许用户拍摄照片或选取已有的图片。以下是如何实现这个功能的详细步骤: 首先,我们需要在`activity_main.xml`布局文件中添加两个按钮,分别用于启动相机和...

    ios开发拍照摄像并保存到相册

    在iOS开发中,集成拍照和摄像功能是常见的需求,用户可以通过这些功能拍摄照片或录制视频,然后将其保存到设备的相册中。本教程将详细讲解如何实现这一过程,主要涉及的知识点包括: 1. **AVFoundation框架**:在...

    Unity打开IOS/Android图库和相机获取相片

    本文将详细讲解如何在Unity中调用iOS和Android原生接口,以便实现打开图库和相机功能,并获取用户选择的图片。 首先,我们需要了解Unity的插件机制。Unity允许开发者编写C#代码,同时可以通过`#if`预处理器指令来...

    app.rar_3d相册_sharewi2_相册

    这包括理解坐标系统、光照、纹理映射、摄像机视角控制等基础知识。 3. **图像处理**:为了让2D图片呈现出3D效果,可能需要进行图像变换,如透视校正、立体合成、阴影生成等。这些处理可能涉及OpenCV或其他图像处理...

    unity for android 摄像机拍照 照片读取保存 上传头像

    通过创建一个AndroidJavaObject或AndroidJavaClass,我们可以调用Android SDK中的Camera API和ImageIO类来实现拍照和图片读取功能。 1. **拍照** 在Unity中拍照通常分为以下几个步骤: - 创建一个...

    Android利用Intent拍照、摄像、打电话、发短信、发邮件等示例

    同样,通过Intent可以调用系统摄像功能,ACTION_VIDEO_CAPTURE对应的是录像功能。代码类似拍照: ```java Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); if (takeVideoIntent....

    permission.js

    uniAPP自己封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启,定位权限,摄像头权限,读写相机权限,麦克风权限,拨打电话权限

    UIImagePickerController拍照与摄像

    UIImagePickerController是iOS平台上用于集成到应用中的一个核心组件,它允许用户通过拍照或从相册选择图片和视频。这个组件是苹果提供的UI框架的一部分,特别设计用于处理媒体输入,特别是对于那些需要用户交互来...

    android 项目源码下载:17套摄影图像类项目

    android 项目源码下载:17套摄影图像类项目,详情如下: Android 3D相册图片滑动+倾斜+放大+倒影处理源码.rar Android Google官网的图片缓存源码.rar ...调用系统相册和系统照相机功能雨实例源码.rar

Global site tag (gtag.js) - Google Analytics