弹出对话框选择相机或者图库内的图片
来源:互联网 发布:tinyumbrella官网 mac 编辑:程序博客网 时间:2024/06/03 15:58
private static final int CAMERA = 100;
private static final int PICTURE = 200;
加入动态权限
public static boolean isGrantExternalRW(Activity activity) {//获取动态权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
activity.requestPermissions(new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1);
return false;
}
return true;
}
点击事件中弹出对话框
new AlertDialog.Builder(this)
.setTitle("选择来源")
.setItems(new String[]{"拍照", "图库"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0://拍照
//打开系统拍照程序,选择拍照图片
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camera, CAMERA);
break;
case 1://图库
//打开系统图库程序,选择图片
Intent picture = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(picture, PICTURE);
break;
}
}
})
.setTitle("选择来源")
.setItems(new String[]{"拍照", "图库"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0://拍照
//打开系统拍照程序,选择拍照图片
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camera, CAMERA);
break;
case 1://图库
//打开系统图库程序,选择图片
Intent picture = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(picture, PICTURE);
break;
}
}
})
.show();
//Bimap:对应图片在内存中的对象
//掌握:存储--->内存:BitmapFactory.decodeFile(String filePath)
// BitmapFactory.decodeStream(InputStream is)
// 内存--->存储:bitmap.compress(Bitmap.CompressFormat.PNG,100,OutputStream os);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//可以考虑的存储路径:手机内部:context.getFilesDir():data/data/包名/files
//手机外部:路径1:context.getExternalFilesDir():storage/sdcard/android/data/包名/files
//路径2:Environment.getExternalStorageDirectory():storage/sdcard
// String path = this.getCacheDir() + "/tx.png";
// Log.e("TAG", "path = " + path);
if (requestCode == CAMERA && resultCode == RESULT_OK && data != null) {
//拍照
Bundle bundle = data.getExtras();
// 获取相机返回的数据,并转换为图片格式
Bitmap bitmap = (Bitmap) bundle.get("data");
//bitmap圆形裁剪
bitmap = BitmapUtils.zoom(bitmap, UIUtils.dp2px(62), UIUtils.dp2px(62));
Bitmap circleImage = BitmapUtils.circleBitmap(bitmap);
//真是项目当中,是需要上传到服务器的..这步我们就不做了。
imageView1.setImageBitmap(circleImage);
//将图片保存在本地
saveImage(circleImage);
} else if (requestCode == PICTURE && resultCode == RESULT_OK && data != null) {
//图库
Uri selectedImage = data.getData();
//这里返回的uri情况就有点多了
//**:在4.4.2之前返回的uri是:content://media/external/images/media/3951或者file://....在4.4.2返回的是content://com.android.providers.media.documents/document/image:3951或者
//总结:uri的组成,eg:content://com.example.project:200/folder/subfolder/etc
//content:--->"scheme"
//com.example.project:200-->"host":"port"--->"authority"[主机地址+端口(省略) =authority]
//folder/subfolder/etc-->"path" 路径部分
//android各个不同的系统版本,对于获取外部存储上的资源,返回的Uri对象都可能各不一样,所以要保证无论是哪个系统版本都能正确获取到图片资源的话
//就需要针对各种情况进行一个处理了
String pathResult = getPath(selectedImage);
Bitmap decodeFile = BitmapFactory.decodeFile(pathResult);
Bitmap zoomBitmap = BitmapUtils.zoom(decodeFile, UIUtils.dp2px(62), UIUtils.dp2px(62));
//bitmap圆形裁剪p
Bitmap circleImage = BitmapUtils.circleBitmap(zoomBitmap);
//真是项目当中,是需要上传到服务器的..这步我们就不做了。
imageView1.setImageBitmap(circleImage);
//保存图片到本地
saveImage(circleImage);
}
}
//保存图片的方法
public void saveImage(Bitmap bitmap) {
String path = this.getCacheDir() + "/tx.png";
Log.e("TAG", "path = " + path);
try {
FileOutputStream fos = new FileOutputStream(path);
//bitmap压缩(压缩格式、质量、压缩文件保存的位置)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//掌握:存储--->内存:BitmapFactory.decodeFile(String filePath)
// BitmapFactory.decodeStream(InputStream is)
// 内存--->存储:bitmap.compress(Bitmap.CompressFormat.PNG,100,OutputStream os);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//可以考虑的存储路径:手机内部:context.getFilesDir():data/data/包名/files
//手机外部:路径1:context.getExternalFilesDir():storage/sdcard/android/data/包名/files
//路径2:Environment.getExternalStorageDirectory():storage/sdcard
// String path = this.getCacheDir() + "/tx.png";
// Log.e("TAG", "path = " + path);
if (requestCode == CAMERA && resultCode == RESULT_OK && data != null) {
//拍照
Bundle bundle = data.getExtras();
// 获取相机返回的数据,并转换为图片格式
Bitmap bitmap = (Bitmap) bundle.get("data");
//bitmap圆形裁剪
bitmap = BitmapUtils.zoom(bitmap, UIUtils.dp2px(62), UIUtils.dp2px(62));
Bitmap circleImage = BitmapUtils.circleBitmap(bitmap);
//真是项目当中,是需要上传到服务器的..这步我们就不做了。
imageView1.setImageBitmap(circleImage);
//将图片保存在本地
saveImage(circleImage);
} else if (requestCode == PICTURE && resultCode == RESULT_OK && data != null) {
//图库
Uri selectedImage = data.getData();
//这里返回的uri情况就有点多了
//**:在4.4.2之前返回的uri是:content://media/external/images/media/3951或者file://....在4.4.2返回的是content://com.android.providers.media.documents/document/image:3951或者
//总结:uri的组成,eg:content://com.example.project:200/folder/subfolder/etc
//content:--->"scheme"
//com.example.project:200-->"host":"port"--->"authority"[主机地址+端口(省略) =authority]
//folder/subfolder/etc-->"path" 路径部分
//android各个不同的系统版本,对于获取外部存储上的资源,返回的Uri对象都可能各不一样,所以要保证无论是哪个系统版本都能正确获取到图片资源的话
//就需要针对各种情况进行一个处理了
String pathResult = getPath(selectedImage);
Bitmap decodeFile = BitmapFactory.decodeFile(pathResult);
Bitmap zoomBitmap = BitmapUtils.zoom(decodeFile, UIUtils.dp2px(62), UIUtils.dp2px(62));
//bitmap圆形裁剪p
Bitmap circleImage = BitmapUtils.circleBitmap(zoomBitmap);
//真是项目当中,是需要上传到服务器的..这步我们就不做了。
imageView1.setImageBitmap(circleImage);
//保存图片到本地
saveImage(circleImage);
}
}
//保存图片的方法
public void saveImage(Bitmap bitmap) {
String path = this.getCacheDir() + "/tx.png";
Log.e("TAG", "path = " + path);
try {
FileOutputStream fos = new FileOutputStream(path);
//bitmap压缩(压缩格式、质量、压缩文件保存的位置)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
此处有不该加入的代码
@OnClick(R.id.iv_top_back)
public void back(View view){
//销毁当前的activity
removeCurrentActivity();
}
退出登录
@OnClick(R.id.loginout)
public void logout(View view){
//1.清空本地存储的用户数据:sp存储中保存的用户信息。本地用户头像
//1.1sp存储中保存的用户信息的清除
SharedPreferences sp = this.getSharedPreferences("user_info", Context.MODE_PRIVATE);
sp.edit().clear().commit();//清空sp存储的数据。(user_info.xml仍然存在,但是内部没有数据)
//2.本地用户头像文件的删除
String filePath = this.getCacheDir() + "/tx.png";
File file = new File(filePath);
if(file.exists()){
file.delete();
}
//2.结束当前Activity的显示
this.removeAll();
this.goToActivity(MainActivity.class,null);
}
/**
* 根据系统相册选择的文件获取路径
*
* @param uri
*/
@SuppressLint("NewApi")
private String getPath(Uri uri) {
int sdkVersion = Build.VERSION.SDK_INT;
//高于4.4.2的版本
if (sdkVersion >= 19) {
Log.e("TAG", "uri auth: " + uri.getAuthority());
if (isExternalStorageDocument(uri)) {
String docId = DocumentsContract.getDocumentId(uri);
String[] split = docId.split(":");
String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
return getDataColumn(this, contentUri, null, null);
} else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[]{split[1]};
return getDataColumn(this, contentUri, selection, selectionArgs);
} else if (isMedia(uri)) {
String[] proj = {MediaStore.Images.Media.DATA};
Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
return actualimagecursor.getString(actual_image_column_index);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return getDataColumn(this, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
* uri路径查询字段
*
* @param context
* @param uri
* @param selection
* @param selectionArgs
* @return
*/
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {column};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
private boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
public static boolean isMedia(Uri uri) {
return "media".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is Google Photos.
*/
public static boolean isGooglePhotosUri(Uri uri) {
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
public void back(View view){
//销毁当前的activity
removeCurrentActivity();
}
退出登录
@OnClick(R.id.loginout)
public void logout(View view){
//1.清空本地存储的用户数据:sp存储中保存的用户信息。本地用户头像
//1.1sp存储中保存的用户信息的清除
SharedPreferences sp = this.getSharedPreferences("user_info", Context.MODE_PRIVATE);
sp.edit().clear().commit();//清空sp存储的数据。(user_info.xml仍然存在,但是内部没有数据)
//2.本地用户头像文件的删除
String filePath = this.getCacheDir() + "/tx.png";
File file = new File(filePath);
if(file.exists()){
file.delete();
}
//2.结束当前Activity的显示
this.removeAll();
this.goToActivity(MainActivity.class,null);
}
/**
* 根据系统相册选择的文件获取路径
*
* @param uri
*/
@SuppressLint("NewApi")
private String getPath(Uri uri) {
int sdkVersion = Build.VERSION.SDK_INT;
//高于4.4.2的版本
if (sdkVersion >= 19) {
Log.e("TAG", "uri auth: " + uri.getAuthority());
if (isExternalStorageDocument(uri)) {
String docId = DocumentsContract.getDocumentId(uri);
String[] split = docId.split(":");
String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
return getDataColumn(this, contentUri, null, null);
} else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[]{split[1]};
return getDataColumn(this, contentUri, selection, selectionArgs);
} else if (isMedia(uri)) {
String[] proj = {MediaStore.Images.Media.DATA};
Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
return actualimagecursor.getString(actual_image_column_index);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return getDataColumn(this, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
* uri路径查询字段
*
* @param context
* @param uri
* @param selection
* @param selectionArgs
* @return
*/
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {column};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
private boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
public static boolean isMedia(Uri uri) {
return "media".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is Google Photos.
*/
public static boolean isGooglePhotosUri(Uri uri) {
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}
别处加入的代码
@Override
public void onResume() {
super.onResume();
String filePath = this.getActivity().getCacheDir() + "/tx.png";
File file = new File(filePath);
if(file.exists()){//如果存在
//存储--->内存
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
imageView1.setImageBitmap(bitmap);
}
}
public void onResume() {
super.onResume();
String filePath = this.getActivity().getCacheDir() + "/tx.png";
File file = new File(filePath);
if(file.exists()){//如果存在
//存储--->内存
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
imageView1.setImageBitmap(bitmap);
}
}
1 0
- 弹出对话框选择相机或者图库内的图片
- IOS开发选择图片(相机或者图库)
- 从相机或者图库获取图片
- 调用相机拍照或者从图库里选择图片裁剪后设置到界面
- 代码库相机图库选择图片
- 调用系统相机、图库并选择图片
- 安卓中选择系统图库的图片及调用相机的源码(原创)
- iOS 调用相机拍照和选择图库图片 设置头像
- 调用Android中相机或图库选择图片并剪切
- Android启动系统相机,打开图库选择图片
- Intent选择器,开系统图库选择图片,开相机拍照
- 从相机或者相册选择图片
- android 调用图库中选择的图片
- qt弹出对话框选择图片并显示
- Android调用系统的相机,图库,以及裁剪图片功能。
- 调用系统相机和图库册得到图片的例子
- 使用AlertDialog弹窗实现相机拍照或者从图库选取图片显示
- Android 图片选择器,相机拍摄和图库选择,并进行裁剪
- 使用 WireShark 实时监控 android 设备网络通信
- LinuxC .1 作业
- mysql获取某个表的所有字段名
- 策略模式
- 史上最全设计模式导学目录(完整版)
- 弹出对话框选择相机或者图库内的图片
- 数据结构_事件复杂度的推导方法_推导O 阶
- Java基础知识之线程
- 暴力推导 Beta 函数与 Gamma 函数关系式
- 关于反拦截
- 做男人的第几任女朋友才是最幸福的
- caffe源码学习(3)--卷积层
- 代码中引用资源
- Spring的事物管理框架源码分析