Windows Phone: How to retrieve the same photo from media library between application instances

ぃ、小莉子 提交于 2019-12-06 11:35:19

问题


How do I retrieve the same photo from the media library between application instances? I launch the photo library for the user to select a photo via:

                        PhotoChooserTask myPhotoChooser = new PhotoChooserTask();
                        myPhotoChooser.ShowCamera = true;
                        myPhotoChooser.Show();
                        myPhotoChooser.Completed += new EventHandler<PhotoResult>(cameraCaptureTask_Completed);

and then in the Event handler, I retrieve the file name of the selected file like this:

    private void cameraCaptureTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
                         string imagePath = e.OriginalFileName.ToString();
         }
    }

I persist this information in isolated storage so that when a user launches the application again I can retrieve the path and display the image like this:

 private  BitmapImage ConvertUriToBitmap(string pathToImage)
    {
        StreamResourceInfo streamResInfo = null;
        Uri uri = new Uri(pathToImage, UriKind.Relative);

        streamResInfo = Application.GetResourceStream(uri); //This fails! StreamResInfo is null
        BitmapImage convertedBitmap = new BitmapImage();
        convertedBitmap.SetSource(streamResInfo.Stream);
        return convertedBitmap;
    } 

However, this doesn't seem to work as the photo path from the photo chooser is some sort of guid in the form: "\Applications\Data\02E58193-119F-42E2-AD85-C24247BE2AB0\Data\PlatformData\PhotoChooser-4edd185d-d934-4dac-8a34-758cac09d338.jpg"

Application.GetResourceStream(uri) is null whenenever I switch out of the application or move between pages. Is there a better way to do this?

How do I retrieve the same path everytime so that when I tombstone or kill the app, i can retireve the file and display it? Or is there a different /more efficient way of doing it.


回答1:


I found the answer in the documentation: http://msdn.microsoft.com/en-us/library/gg680264%28v=pandp.11%29.aspx Basically, there is a bug in the photo chooser which returns a temporary path. Microsofts recommendation is to copy the picture to isolated storage if you want to use it between app instances.




回答2:


Application.GetResourceStream will return null for that path because the GetResourceStream method is looking for a resource within the application itself, not from the device.

To re-load the same image on resume from tombstoning simply persist the OriginalFileName property, and then use that to create a BitmapImage as follows:

string path = /* Load the saved OriginalFileName */;
var bitmap = new BitmapImage(new Uri(path, UriKind.Absolute));
myImageControl.Source = bitmap;

NOTE: The OriginalFileName property is already a string, so you don't need to call .ToString() on it.



来源:https://stackoverflow.com/questions/5740552/windows-phone-how-to-retrieve-the-same-photo-from-media-library-between-applica

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!