Android相机,图库获取图片

大家的APP中经常会有从手机相机、图库获取图片,这里封装了方法可以方便大家,解决了Android7.0资源uri的获取方式,兼容SDK19以上的机子,有权限请求整合,欢迎大家下架使用,评论指导也可以。
程序运行结果:

这里写图片描述
程序应用类代码:

package jason.com.carmerphoto;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import static jason.com.carmerphoto.GetPicUtil.REQUEST_PERMISSION_CAMERA;
import static jason.com.carmerphoto.GetPicUtil.REQUEST_PERMISSION_WRITE;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    //控件
    private ImageView img_album;
    private Button btn_dialog;
    private TextView tv_desd;

    String imagePath = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        this.img_album = (ImageView) findViewById(R.id.img_album);
        this.btn_dialog = (Button) findViewById(R.id.btn_pic);
        this.tv_desd = (TextView) findViewById(R.id.tv_desc);
        this.btn_dialog.setOnClickListener(this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //获取选择照片后的内容,以兼容Android=<19,>19
        this.imagePath = GetPicUtil.handlePicResult(this, data, requestCode, resultCode, img_album);
        Log.v("TAG", "get_picpath=" + imagePath);
    }


    /**
     * 不处理权限的回调也可以,就是第一次获取权限,要再次点击控件触发
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_PERMISSION_CAMERA:
                //判断是否有权限
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    GetPicUtil.take_photo(this);//打开相机
                } else {
                    Toast.makeText(this, "你需要权限许可!", Toast.LENGTH_LONG).show();
                }
                break;
            case REQUEST_PERMISSION_WRITE:
                //判断是否有权限
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    GetPicUtil.openAlbum(this);//打开相册
                } else {
                    Toast.makeText(this, "你需要权限许可!", Toast.LENGTH_LONG).show();
                }
                break;
            default:
                break;
        }
    }

    @Override
    public void onClick(View v) {
        tv_desd.setText("sdk_" + Build.VERSION.SDK_INT);
        //1.弹出对话框选择 相机还是图库
        GetPicUtil.showPicDialog(this);
        //2.直接相机
//        GetPicUtil.xiangjiClick(this);
        //3.直接进入图库
//        GetPicUtil.select_photo(this);
    }
}

//大家的Androidstudio版本可能都不同,这里下载解压后不要着急打开项目,打开项目文件夹修改几个文件可以使用你本地的gradle版本,打开你原来运行过的项目替换以下代码:
1.打开项目的build.gradle文件 ,修改替换成你原有的项目代码语句,保存文件。
//classpath ‘com.android.tools.build:gradle:2.2.2’
2.打开项目gradle/warpper/gradle-wrapper.properties文件,替换保存:
//distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip
3.打开项目app/build.gradle,修改以下工具版本,打开你原来运行过的项目替换以下代码:
//compileSdkVersion 25
//buildToolsVersion “25.0.3”
//compile ‘com.android.support:appcompat-v7:25.3.1’
//compile ‘com.android.support:design:25.3.1’

本文代码Demo下载

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页