版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】如何解决Android调用系统图片裁剪限定尺寸及7.0照相问题
在下给大家分享一下如何解决Android调用系统图片裁剪限定尺寸及7.0照相问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!本文实例为大家分享了Android调用系统图片裁剪限定尺寸及7.0照相问题的解决方法,具体内容如下内容:手机系统的裁剪介绍,7.0调用相机崩溃解决代码如下:<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.leixiansheng.cutphoto.MainActivity">
<Button
android:id="@+id/btn_select_from_local"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="cut"/>
<ImageView
android:id="@+id/iv_local"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>java:package
com.example.leixiansheng.cutphoto;
import
android.Manifest;
import
android.annotation.SuppressLint;
import
android.content.Intent;
import
android.content.pm.PackageManager;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
.Uri;
import
android.os.Environment;
import
android.os.StrictMode;
import
vider.MediaStore;
import
android.support.annotation.NonNull;
import
android.support.v4.app.ActivityCompat;
import
android.support.v4.content.ContextCompat;
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.Toast;
import
java.io.FileNotFoundException;
import
java.util.ArrayList;
import
java.util.List;
import
butterknife.BindView;
import
butterknife.ButterKnife;
import
butterknife.OnClick;
public
class
MainActivity
extends
AppCompatActivity
{
@BindView(R.id.btn_select_from_local)
Button
mBtnSelectFromLocal;
@BindView(R.id.btn_take_photo)
Button
mBtnTake;
@BindView(R.id.iv_local)
ImageView
mIvLocal;
private
static
final
String
TAG
=
MainActivity.class.getSimpleName();
private
static
final
String
IMAGE_FILE_LOCATION
=
"file:///"
+
Environment.getExternalStorageDirectory().getPath()
+
"/temp.jpg";
private
static
final
int
CHOOSE_PICTURE
=
1;
private
static
final
int
CROP_PICTURE
=
2;
private
static
final
int
REQUEST_CODE_OK
=
3;
private
static
final
int
TAKE_PHOTO
=
4;
private
Uri
imageUri
=
Uri.parse(IMAGE_FILE_LOCATION);
private
PermissionListener
mListener;
@SuppressLint("NewApi")
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//
android
7.0系统解决拍照的问题
StrictMode.VmPolicy.Builder
builder
=
new
StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}
@OnClick({R.id.btn_select_from_local,
R.id.btn_take_photo})
public
void
onClick(final
View
view)
{
requestRunTimePermission(new
String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA},
new
PermissionListener()
{
@Override
public
void
onGranted()
{
switch
(view.getId())
{
case
R.id.btn_select_from_local:
selectFromLocal();
break;
case
R.id.btn_take_photo:
takePhoto();
break;
}
}
@Override
public
void
onDenied(List<String>
deniedPermission)
{
Toast.makeText(MainActivity.this,
"权限不足",
Toast.LENGTH_SHORT).show();
}
});
}
/**
*
启动系相机
*/
private
void
takePhoto()
{
Intent
intent
=
new
Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,
imageUri);
//启动相机(带返回结果)
startActivityForResult(intent,
TAKE_PHOTO);
}
/**
*
启动系统图片选择
*/
private
void
selectFromLocal()
{
Intent
intent
=
new
Intent(Intent.ACTION_PICK,
null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
//返回数据为被选照片的Uri
startActivityForResult(intent,
CHOOSE_PICTURE);
}
@Override
protected
void
onActivityResult(int
requestCode,
int
resultCode,
Intent
data)
{
super.onActivityResult(requestCode,
resultCode,
data);
Log.d(TAG,
resultCode
+
"");
if
(resultCode
==
RESULT_OK)
{
switch
(requestCode)
{
case
CHOOSE_PICTURE:
startPhotoZoom(data.getData());
break;
case
CROP_PICTURE:
//
取得裁剪后的图片
try
{
mIvLocal.setImageBitmap(BitmapFactory.decodeStream(
getContentResolver().openInputStream(imageUri)
));
}
catch
(FileNotFoundException
e)
{
e.printStackTrace();
}
break;
case
TAKE_PHOTO:
startPhotoZoom(imageUri);
break;
default:
break;
}
}
}
/**
*
设置裁剪参数,开始裁剪
*
@param
uri
*/
public
void
startPhotoZoom(Uri
uri)
{
Intent
intent
=
new
Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,
"image/*");
//
下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop",
"true");
intent.putExtra("scale",
true);
intent.putExtra("aspectX",
2);
//裁剪框
X
比值
intent.putExtra("aspectY",
1);
//裁剪框
Y
比值
intent.putExtra("outputX",
600);
//裁剪后输出宽度
intent.putExtra("outputY",
300);
//裁剪后输出高度
intent.putExtra("return-data",
false);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
imageUri);
//输出路径
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",
true);
//
no
face
detection
startActivityForResult(intent,
CROP_PICTURE);
}
/**
*
动态权限请求
*
*
@param
permissions
*/
public
void
requestRunTimePermission(String[]
permissions,
PermissionListener
listener)
{
mListener
=
listener;
List<String>
permissionList
=
new
ArrayList<>();
for
(String
permission
:
permissions)
{
if
(ContextCompat.checkSelfPermission(this,
permission)
!=
PackageManager.PERMISSION_GRANTED)
{//检测当前权限是否已经被允许
permissionList.add(permission);//没有则添加进集合
}
}
if
(!permissionList.isEmpty())
{//检测权限集合中是否有未申请的权限
ActivityCompat.requestPermissions(this,
permissionList.toArray(new
String[permissionList.size()]),
REQUEST_CODE_OK);
}
else
{
//所有权限都通过了
mListener.onGranted();
}
}
@Override
public
void
onRequestPermissionsResult(int
req
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年02月山东省泰安市消防救援系统所属事业单位2024年度公开招考工作人员笔试参考题库附带答案详解
- 2023年团支部工作总结(5篇)
- 【教案】品味与感知-领略雕塑之线的韵律+教学设计-高二美术人美版(2019)选择性必修3+雕塑
- 工厂化学物品爆炸应急预案
- 护理技术上第七节 医院感染的预防和控制附有答案
- 函数的单调性(原卷版)2
- 重庆市语文卷
- 黑色星期五作文400字大全
- 木兰诗原文及翻译-木兰诗朗诵和评价节奏划分-木兰诗练习题及阅读答案
- 四川省宜宾市高三下学期第二次诊断考试理综生物试题2
- 宗教寺院消防安全培训课件
- GB 14866-2023眼面防护具通用技术规范
- 儿童发展心理学:费尔德曼带你开启孩子的成长之旅
- 分析建筑施工行业技术创新发展中的知识产权保护问题及其解决策略
- 吐酸中医护理查房
- 广州白云山制药股份有限公司成本管理研究
- 谈小学随班就读儿童的心理关怀
- 悔过书写给检察院范文范本
- excel综合应用vlookup函数教学
- 腰椎间盘突出症运动处方
- 2023年初中语文八年级下册期中试卷(湖南长沙A卷)全解全析
评论
0/150
提交评论