手机视频直播系统——Android端上传图片兼容问题

前言

手机视频直播系统在互联网领域的受欢迎程度一直居高不下,直播已经成为当下最流行的一种娱乐消遣方式。直播系统也从之前的pc转到现在的手机APP,目前市面上人们使用的手机系统分为两个,即Android端和iOS端。今天来给大家分享一下关于Android端上传图片方面的相关内容。 Android端上传图片功能,即调用系统相册和拍照上传直播封面和头像,需要适配各种机型和不同系统版本,以下为此过程中遇到的具体问题及其相应的解决方案。
1.为了适配不同系统版本,调用相册和拍照时分别对系统版本号进行判断,做不同的处理。如下
//打开相册,选择文件

if (Build.VERSION.SDK_INT < 19) {
    intent.setAction(Intent.ACTION_GET_CONTENT);
} else {
    intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
}

//开启摄像头,执行拍照

Uri uri = null;
if (Build.VERSION.SDK_INT >= 24) {
    uri = FileProvider.getUriForFile(mContext, WordUtil.getString(R.string.FILE_PROVIDER), mCameraResult);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else {
    uri = Uri.fromFile(mCameraResult);
}

2.为了解决7.0系统对目录访问的限制的问题,所以用到了FileProvider,需要在AndroidManifest.xml中增加provider节点,在xml文件夹中创建file_paths.xml文件

<!--Android 7.0 拍照-->
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.yunbao.phonelive.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"/>
</provider>

3.为了解决,许多机型在选择相册和拍照后的裁剪时出现的SecurityException问题,首先在gradle中添加依赖 ,用UCrop去做Intent跳转,可设置图片裁剪比例和宽高,选择相册图片后的裁剪代码如下

/**
 * 选择后裁剪
 */
private void cropAfterChoose(Uri uri) {
    mCorpResult = getNewFile();
    try{
        Uri resultUri = Uri.fromFile(mCorpResult);
        if (resultUri == null || mFragment == null || mContext == null) {
            return;
        }
        UCrop uCrop = UCrop.of(uri, resultUri)
                .withAspectRatio(1, 1)
                .withMaxResultSize(400, 400);
        Intent intent = uCrop.getIntent(mContext);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        startActivityForResult(intent, mCropResultCallback);
    }catch (Exception e){
        try {
            Uri resultUri = null;
            if (Build.VERSION.SDK_INT >= 24) {
                resultUri = FileProvider.getUriForFile(mContext, WordUtil.getString(R.string.FILE_PROVIDER), mCorpResult);
            }
            if (resultUri == null || mFragment == null || mContext == null) {
                return;
            }
            UCrop uCrop = UCrop.of(uri, resultUri)
                    .withAspectRatio(1, 1)
                    .withMaxResultSize(400, 400);
            Intent intent = uCrop.getIntent(mContext);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            startActivityForResult(intent, mCropResultCallback);
        }catch (Exception e1){
            e1.printStackTrace();
        }
    }
}

以上就是手机视频直播系统开发过程中,关于Android端上传图片的实现方案。这一方案可以解决人们在上传图片时遇到的各种问题,从根本上提升用户的产品体验。

    原文作者:Android高级架构
    原文地址: https://www.jianshu.com/p/6bb1b61d2815
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞