调用系统相机,相册

原创 2018年04月16日 18:44:17

compile 'com.github.zhaolei9527:BottomMenu:v1.0.1'
compile 'com.lovedise:permissiongen:0.0.6'

----------------------MainActivity---------------------

package com.example.earl;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import sakura.bottommenulibrary.bottompopfragmentmenu.BottomMenuFragment;
import sakura.bottommenulibrary.bottompopfragmentmenu.MenuItem;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private final static int PHOTO_CHOOSE = 0;
    private final static int TAKE_A_PICTURE = 1;
    private ImageView img;
    //保存像片的路径
    private String saveImagePath = "";
    private Uri imageUriFromCamera;

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


        img = findViewById(R.id.img);
        Button btn = findViewById(R.id.btn);
        btn.setOnClickListener(this);
        //拼接路径-在sd卡的根目录下
        saveImagePath = Environment.getExternalStorageDirectory().getPath() + "/myimg.jpg";

    }

    @Override
    public void onClick(View v) {

        new BottomMenuFragment(MainActivity.this)
                .addMenuItems(new MenuItem("从相册选择"))
                .addMenuItems(new MenuItem("拍照"))
                .setOnItemClickListener(new BottomMenuFragment.OnItemClickListener() {
                    @Override
                    public void onItemClick(TextView menu_item, int position) {
                        Toast.makeText(MainActivity.this, menu_item.getText().toString().trim(), Toast.LENGTH_SHORT).show();

                        switch (position) {
                            case PHOTO_CHOOSE:
                                invokepics();
                                Toast.makeText(MainActivity.this, menu_item.getText().toString().trim(), Toast.LENGTH_SHORT).show();
                                break;
                            case TAKE_A_PICTURE:
                                invokecarema();
                                break;
                        }
                    }
                })
                .show();
    }

    /**
     * 调用系统相机
     */
    private void invokecarema() {

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        //给像机一个指令  进行照片的保存         MediaStore.EXTRA_OUTPUT:输出
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(saveImagePath)));
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        imageUriFromCamera = FileProvider.getUriForFile(MainActivity.this,
                "com.xuezj.fileproviderdemo.fileprovider", new File(saveImagePath));
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUriFromCamera);

        startActivityForResult(intent, 800);
    }

    /**
     * 调用系统相册
     */
    public void invokepics() {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");//设置类型
        startActivityForResult(intent, 2000);
    }

    /**
     * 回调方法
     *
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 800) {
            //加载显示 sd卡拍摄的照片
            img.setImageURI(Uri.fromFile(new File(saveImagePath)));


        } else if (requestCode == 9999) {//调用裁剪组件的请求码

            //得到裁剪后的照片进行显示
            Bitmap bitmap = data.getParcelableExtra("data");
            img.setImageBitmap(bitmap);

        }
        if (requestCode == 2000) {
            //从相册中得到照片-得到的是一个路径
            Uri data2 = data.getData();
            img.setImageURI(data2);

        }

        super.onActivityResult(requestCode, resultCode, data);
    }



}

--------------------activity_main.xml----------------------

<ImageView
    android:layout_marginTop="200dp"
    android:id="@+id/img"
    android:layout_gravity="center"
    android:layout_width="120dp"
    android:layout_height="120dp" />

<Button
    android:id="@+id/btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="弹框"
    />
----------------- res-->xml-->file_paths.xml -----------------

--------------------file_paths.xml--------------------

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <!--填写你要所要申请访问的目录地址,name最好是你的目录名,path是你要申请的目录-->
    <external-path name="camera_photos" path="."  />
    <external-path name="cache" path="Android/data/com.xuezj.fileproviderdemo/cache" />
    <external-path name="images" path="Pictures/" />
    <external-path name="dcim" path="DCIM/" />
</paths>
-----------------------AndroidManifest.xml----------------------
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.xuezj.fileproviderdemo.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"/>
</provider>

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40116418/article/details/79964489

Android调用系统相机,相册,并实现图片剪裁功能

先上效果图 妹子很漂亮吧!!! 下面上代码: 1,Faceutil类: package cn.sh.steel; import android.app.Activity; imp...
  • weixin_36187973
  • weixin_36187973
  • 2016年11月19日 12:10
  • 1745

Android 多媒体应用——调用系统相机和相册

有时朋友圈发一条状态,想要添加一张照片我们可以直接用相机拍摄,也可以直接在相册中选取上传,这就是用到了应用调用相机或者相册的功能。我们如何为应用添加这个功能呢?调用相机拍照  对于使用相机进行拍摄实现...
  • To_be_Designer
  • To_be_Designer
  • 2015年09月16日 19:52
  • 2455

手把手教你:android调用系统相机、相册功能,适配6.0权限获取以及7.0以后获取URI(兼容多版本)

Android中调用系统相机来拍摄照片的代码,如下: 1、首先设置Uri获取判断以及相机请求Code public final int TYPE_TAKE_PHOTO = 1;//Uri获取类型判...
  • u011150924
  • u011150924
  • 2017年05月15日 14:18
  • 11257

Android调用系统相机和相册-坑篇

之前分享了Android调用系统相机和相册,但是由于国内Android机型繁多,各家都自己的room,调用系统的还是会出现不少问题: 一、拍照后照片被旋转 这种情况是使用Camera拍照以...
  • xjbclz
  • xjbclz
  • 2016年09月25日 12:27
  • 2330

ios开发调用系统相机(照片/视频)

iOS开发使用UIImagePickerController调用系统相机进行拍照与视频录制
  • qq_38370919
  • qq_38370919
  • 2017年06月09日 17:03
  • 966

android 调用系统相机、相册剪切功能

效果图片 /** 跳转到系统的拍照功能 */ protected void takePhoto() { Intent intent = new Intent(MediaSto...
  • android_hl
  • android_hl
  • 2017年05月23日 17:55
  • 295

Android7.0调用系统相机拍照、访问相册问题。

关于Android7.0调用系统相机拍照、访问相册的一些问题。
  • Zz110753
  • Zz110753
  • 2017年03月08日 17:58
  • 17501

Android 调用系统相机以及相册源码

Android 调用系统相机拍照、以及相册。完成之后图片是上传到app上。前面的功能已经测试过了。没有上传到服务器,因为我没服务器测试。但项目里面有个类可以参考上传图片到服务器,我就没测试了。接下来看...
  • qq_16064871
  • qq_16064871
  • 2015年04月12日 08:44
  • 5433

android之 h5调用系统相机和相册并显示

先上html界面的代码,放在assets里面就可以了,我也不太会html,所以随便写了点 ...
  • villa_mou
  • villa_mou
  • 2017年10月17日 09:25
  • 468

iOS开发:调用系统自带相机以及获取相册照片的功能实现

在iOS开发过程中,经常用到的技术之一就是APP上传图片了,这个知识点虽然不难,但是上传图片的需求却是各不相同,比如有些时候需要你一次性在相册中同时多选指定数量的照片,而且选择的照片数量不确定,有时候...
  • CC1991_
  • CC1991_
  • 2017年08月05日 14:54
  • 7111
收藏助手
不良信息举报
您举报文章:调用系统相机,相册
举报原因:
原因补充:

(最多只允许输入30个字)