调用系统相机与相册

首先是相关权限,必须加上

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

 <uses-permission android:name="android.permission.CAMERA"/>
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
 <uses-permission android:name="com.miui.whetstone.permission.ACCESS_PROVIDER"/>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

 <uses-feature android:name="android.hardware.camera.autofocus" />

//从相册取图片
public void gallery() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent, PHOTO_FROM_GALLERY);
}

//拍照取图片
public void camera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    uriForCamera = Uri.fromFile(createImageStoragePath());
    sp.edit().putString("url", String.valueOf(uriForCamera)).commit();
    /**
     * 指定了uri路径,startActivityForResult不返回intent,
     * 所以在onActivityResult()中不能通过data.getData()获取到uri;
     */
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uriForCamera);
    startActivityForResult(intent, PHOTO_FROM_CAMERA);
}
/**
 * 重写此方法 给控件赋值
 *
 * @param requestCode
 * @param resultCode
 * @param data
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //第一层switch
    switch (requestCode) {
        case PHOTO_FROM_GALLERY:
            //第二层switch
            switch (resultCode) {
                case RESULT_OK:
                    if (data != null) {
                        uri2 = data.getData();
                          mMeinv.setImageURI(uri2);
                    }
                    break;
                case RESULT_CANCELED:
                    break;
            }
            break;
        case PHOTO_FROM_CAMERA:
            if (resultCode == RESULT_OK) {
                Uri uri = Uri.parse(sp.getString("uri", String.valueOf(uriForCamera)));
                updateDCIM(uri);
                try {
                    //把URI转换为Bitmap,并将bitmap压缩,防止OOM(out of memory)
                    Bitmap bitmap = ImageTools.getBitmapFromUri(uri, this);
                    mGameview.initBitmap(bitmap);
                    mMeinv.setImageBitmap(bitmap);
                    Log.e("图片2------->", bitmap + "");
                } catch (IOException e) {
                    e.printStackTrace();
                }

                removeCache("uri");
            } else {
                Log.e("result", "is not ok" + resultCode);
            }
            break;
        default:
            break;
    }
}
/**
 * 设置相片存放路径,先将照片存放到SD卡中,再操作
 *
 * @return
 */
private File createImageStoragePath() {
    if (hasSdcard()) {
        appDir = new File("/sdcard/testImage/");
        if (!appDir.exists()) {
            appDir.mkdirs();
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        date = new Date();
        str = simpleDateFormat.format(date);
        String fileName = str + ".jpg";
        File file = new File(appDir, fileName);
        return file;
    } else {
        Log.e("sd", "is not load");
        return null;
    }
}

/**
 * 将照片插入系统相册,提醒相册更新
 *
 * @param uri
 */
private void updateDCIM(Uri uri) {
    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    intent.setData(uri);
    this.sendBroadcast(intent);

    Bitmap bitmap = BitmapFactory.decodeFile(uri.getPath());
    MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", "");
}

/**
 * 判断SD卡是否可用
 *
 * @return
 */
private boolean hasSdcard() {
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        return true;
    } else {
        return false;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42081816/article/details/80532661