编辑:我想更新真正的问题。在三星手机上,您有“图库”,在“图库”中,您还可以查看您的谷歌照片备份。这是我想要得到的照片选择。现在在其他应用程序(Close5)上,它们只是显示一条消息,说明 “不支持该照片”。但为什么?为什么我们不能让这个 url (https:/lh3.googleusercontent) 工作?
E/BitmapFactory:无法解码流:java.io.FileNotFoundException:/https:/lh3.googleusercontent.com/-Llgk8Mqk-rI/U8LK0SMnpWI/AAAAAAAAFk4/0cktb59DnL8GgblJ-IJIUBDuP9MQXCBPACHM/I/IMG_20140711_085012.jpg:打开失败:ENOENT(否这样的文件或目录)
大家可以清楚地看到这是一张带有真实网址的真实照片:
https:/lh3.googleusercontent.com/-Llgk8Mqk-rI/U8LK0SMnpWI/AAAAAAAAFk4/0cktb59DnL8GgblJ-IJIUBDuP9MQXCBPACHM/I/IMG_20140711_085012.jpg
一切正常,直到我从照片或谷歌照片图像中选择而不是从图库中选择,我尝试处理异常(Sorry, that image isn't supported. Try another gallery!
)但这似乎不完整。我尝试在这里查看其他解决方案,但没有一个适用于谷歌照片。谢谢!
错误是一个空指针,具有:
应用程序 E/BitmapFactory:无法解码流:java.io.FileNotFoundException:/https:/lh3.googleusercontent
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (resultCode != Activity.RESULT_CANCELED) {
if (requestCode == 1) {
try{
String selectedImagePath = getAbsolutePath(data.getData()); ((PostAdParentTabHost)getActivity()).getMap_of_picture_paths().put(1, selectedImagePath);
post_ad_camera_img_1.setImageBitmap(decodeSampledBitmapFromFileToCustomSize(selectedImagePath, 150, 150));
animation_master.fade(post_ad_camera_img_1);
}catch(Exception e){
e.printStackTrace();
((PostAdParentTabHost)getActivity()).getMap_of_picture_paths().remove(requestCode);
Toast.makeText(getActivity(), "Sorry, that image isn't supported. Try another gallery! ", Toast.LENGTH_SHORT).show();
}
//------------------------------------------------------Methods:
public String getAbsolutePath(Uri uri) {
Uri final_uri = uri;
if (uri.getLastPathSegment().contains("googleusercontent.com")){
final_uri = getImageUrlWithAuthority(getActivity(), uri);
String[] projection = { MediaStore.MediaColumns.DATA };
Cursor cursor = getActivity().getContentResolver().query(final_uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
return null;
}
}else{
String[] projection = { MediaStore.MediaColumns.DATA };
Cursor cursor = getActivity().getContentResolver().query(final_uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
return null;
}
}
public static Uri getImageUrlWithAuthority(Context context, Uri uri) {
InputStream is = null;
if (uri.getAuthority() != null) {
try {
is = context.getContentResolver().openInputStream(uri);
Bitmap bmp = BitmapFactory.decodeStream(is);
return writeToTempImageAndGetPathUri(context, bmp);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
public static Uri writeToTempImageAndGetPathUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
public Uri setImageUri() {
// Store image in dcim
File file = new File(Environment.getExternalStorageDirectory()
+ "/DCIM/", "image" + new Date().getTime() + ".png");
Uri imgUri = Uri.fromFile(file);
this.image_as_uri_for_parcel = imgUri;
this.imgPath = file.getAbsolutePath();
return imgUri;
}