关于相机获取数据为空的一个小细节,自己遇到的坑,可以留下日后再看看。
好累,不想打字!
加班🙂
/**
* @param intent
* @return
*/
private Uri[] getUrisForWebViewFormIntent(Uri uri, Intent intent) {
// 尝试获取原图
Uri[] results = getOneImageByUri(uri);
if (results[0] == null) {
// 不行再获取缩略图
results = getOneThumbnailByIntent(intent);
}
return results;
}
/**
* 根据 uri 获取一张原图 [图片来源于相机]
* 使用场景:相机获取数据为空时候 intent.toUri() 不能需求时候
*
* @param uri
* @return
*/
private Uri[] getOneImageByUri(Uri uri) {
Bitmap bitmap = uri2Bitmap(uri);
Uri tempUri = bitmap2Uri(bitmap);
Uri[] results = new Uri[1];
if (tempUri != null) {
results[0] = tempUri;
}
return results;
}
/**
* 获取一张缩略图 [图片来源于相机 - 照相机返回的 intent]
* 使用场景:相机获取数据为空时候 intent.getData() == null
*
* @return
*/
private Uri[] getOneThumbnailByIntent(Intent intent) {
Uri[] results = new Uri[1];
if (intent != null) {
Bundle extras = intent.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null, null));
if (uri != null) {
results[0] = uri;
}
}
return results;
}
/**
* @param intent
* @return
*/
private Bitmap intent2Bitmap(Intent intent) {
Bitmap bitmap = null;
if (intent != null) {
Bundle extras = intent.getExtras();
bitmap = (Bitmap) extras.get("data");
}
return bitmap;
}
/**
* @param bitmap
* @return
*/
private Uri bitmap2Uri(Bitmap bitmap) {
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null, null));
return uri;
}
/**
* @param uri
* @return
*/
private Bitmap uri2Bitmap(Uri uri) {
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 高质量 bitmap
*
* @param path
* @return
*/
public static Bitmap compressARGB_8888(String path) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
return bitmap;
}