Photochooser task not working after phone was synced with PC?

mcosmin222

Senior Member
May 1, 2012
1,130
287
0
hello guys and girls,

I have a very peculiar problem with my application (two actually, working together to make a bigger problem)

I have a resume tile, which allows the users to resume working on the picture they were working after navigating away from the game.

Now, the users can choose pictures in their media lib to use in the game.
However, after i sync my phone to laptop, unplug it, then try to use the resume tile, it simply brings me to main page and does not continue doing the resume as it should do. This only happens with pictures from photochooser task: the ones integrated in the app work fine.

The photochooser task also refuses to work properly until i start the app "the usual way" and not from the resume tile. It basically goes back to the MainPage no matter what.
So, what's with all this? I think it has something to do with the syncing messing up isolated storage and phone storage.

here's some code:

MainPage:


Basically, I'm using some messages to know from where i navigated to the MainPage. The "resumeTile" message is obviously coming from the resume tile, whereas "FromPlay" means the player just left the play page.

App.IsFirstLoaded is used to known that it loaded already and should ignore the "ResumeTile" message and continue with the resume, but not to repeat the same feat in case the user navigates from any page in the game.

Code:
 protected override void OnNavigatedTo(NavigationEventArgs e)
        {

           
            
                string msesage = null;
                try
                {


                    NavigationContext.QueryString.TryGetValue("message", out msesage);
                    if (msesage == "resumeTile")
                    {
                        App.isFirstLoaded = true;
                    }

                    if (msesage == "FromPlay")
                    {
                        NavigationService.RemoveBackEntry();
                    }

                    if (App.isFirstLoaded == true)
                    {
                        resume_SubmitResume();
                        App.isFirstLoaded = false;
                        msesage = null;
                    }

                    else
                    {
                        //NavigationService.RemoveBackEntry();

                        base.OnNavigatedTo(e);
                        if (msg == "openPlay")
                        {
                            string msggs = msg;
                            msg = null;
                            if (portrait)
                            {
                                NavigationService.Navigate(new Uri("/PlayPage.xaml?msg=" + msggs, UriKind.Relative));
                            }
                            else
                            {
                                NavigationService.Navigate(new Uri("/PlayPageLandscape.xaml?msg=" + msggs, UriKind.Relative));
                            }
                        }
                    }


                }
                catch (NullReferenceException)
                {
                }
            
        }


and here is the photochooser task completed event handler



Code:
       void photochoser_Completed(object sender, PhotoResult e)
        {
           string path = "mhgcjtcthgg.jpg";
          
           if (e.TaskResult == TaskResult.OK)
           {
               using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
               {
                   using (IsolatedStorageFileStream fs = new IsolatedStorageFileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, IsolatedStorageFile.GetUserStoreForApplication()))
                   {
                       if (e.Error == null)
                       {

                           if (App.AutoSave == true)
                           {
                               MediaLibrary ml = new MediaLibrary();

                               ml.SavePicture("CountlessPuzzles" + DateTime.Now.ToShortTimeString(), e.ChosenPhoto);

                           }

                           BitmapImage bi = new BitmapImage();
                           bi.SetSource(e.ChosenPhoto);
                           WriteableBitmap wb = new WriteableBitmap(bi);

                           if (wb.PixelHeight <= wb.PixelWidth)
                           {
                               Extensions.SaveJpeg(wb, fs, DHeigh, DWidth, 0, 100);
                               //NavigationService.Navigate(new Uri("/PlayPageLandscape.xaml?msg=" + msg, UriKind.Relative));

                           }
                           else
                           {

                               Extensions.SaveJpeg(wb, fs, DWidth, DHeigh, 0, 100);
                               //NavigationService.Navigate(new Uri("PlayPage.xaml?msg=" + msg, UriKind.Relative));
                               portrait = true;
                           }
                       }
                   }
               }


               msg = "openPlay";
           }
           else
           {
               isDataSavedInIsolatedStorage = false;
           }
        //   e.ChosenPhoto.Close();
        }
So, any ideas?:D
 
Last edited:

monotheist

Senior Member
Mar 28, 2011
71
61
0
hello guys and girls,

I have a very peculiar problem with my application (two actually, working together to make a bigger problem)

I have a resume tile, which allows the users to resume working on the picture they were working after navigating away from the game.

Now, the users can choose pictures in their media lib to use in the game.
However, after i sync my phone to laptop, unplug it, then try to use the resume tile, it simply brings me to main page and does not continue doing the resume as it should do. This only happens with pictures from photochooser task: the ones integrated in the app work fine.

The photochooser task also refuses to work properly until i start the app "the usual way" and not from the resume tile. It basically goes back to the MainPage no matter what.
So, what's with all this? I think it has something to do with the syncing messing up isolated storage and phone storage.

here's some code:

MainPage:


Basically, I'm using some messages to know from where i navigated to the MainPage. The "resumeTile" message is obviously coming from the resume tile, whereas "FromPlay" means the player just left the play page.

App.IsFirstLoaded is used to known that it loaded already and should ignore the "ResumeTile" message and continue with the resume, but not to repeat the same feat in case the user navigates from any page in the game.

Code:
 protected override void OnNavigatedTo(NavigationEventArgs e)
        {

           
            
                string msesage = null;
                try
                {


                    NavigationContext.QueryString.TryGetValue("message", out msesage);
                    if (msesage == "resumeTile")
                    {
                        App.isFirstLoaded = true;
                    }

                    if (msesage == "FromPlay")
                    {
                        NavigationService.RemoveBackEntry();
                    }

                    if (App.isFirstLoaded == true)
                    {
                        resume_SubmitResume();
                        App.isFirstLoaded = false;
                        msesage = null;
                    }

                    else
                    {
                        //NavigationService.RemoveBackEntry();

                        base.OnNavigatedTo(e);
                        if (msg == "openPlay")
                        {
                            string msggs = msg;
                            msg = null;
                            if (portrait)
                            {
                                NavigationService.Navigate(new Uri("/PlayPage.xaml?msg=" + msggs, UriKind.Relative));
                            }
                            else
                            {
                                NavigationService.Navigate(new Uri("/PlayPageLandscape.xaml?msg=" + msggs, UriKind.Relative));
                            }
                        }
                    }


                }
                catch (NullReferenceException)
                {
                }
            
        }


and here is the photochooser task completed event handler



Code:
       void photochoser_Completed(object sender, PhotoResult e)
        {
           string path = "mhgcjtcthgg.jpg";
          
           if (e.TaskResult == TaskResult.OK)
           {
               using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
               {
                   using (IsolatedStorageFileStream fs = new IsolatedStorageFileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, IsolatedStorageFile.GetUserStoreForApplication()))
                   {
                       if (e.Error == null)
                       {

                           if (App.AutoSave == true)
                           {
                               MediaLibrary ml = new MediaLibrary();

                               ml.SavePicture("CountlessPuzzles" + DateTime.Now.ToShortTimeString(), e.ChosenPhoto);

                           }

                           BitmapImage bi = new BitmapImage();
                           bi.SetSource(e.ChosenPhoto);
                           WriteableBitmap wb = new WriteableBitmap(bi);

                           if (wb.PixelHeight <= wb.PixelWidth)
                           {
                               Extensions.SaveJpeg(wb, fs, DHeigh, DWidth, 0, 100);
                               //NavigationService.Navigate(new Uri("/PlayPageLandscape.xaml?msg=" + msg, UriKind.Relative));

                           }
                           else
                           {

                               Extensions.SaveJpeg(wb, fs, DWidth, DHeigh, 0, 100);
                               //NavigationService.Navigate(new Uri("PlayPage.xaml?msg=" + msg, UriKind.Relative));
                               portrait = true;
                           }
                       }
                   }
               }


               msg = "openPlay";
           }
           else
           {
               isDataSavedInIsolatedStorage = false;
           }
        //   e.ChosenPhoto.Close();
        }
So, any ideas?:D

Photochooser does not work when the phone is syncing via zune, maybe once the app is running and you try to sync, PhotoChooser crashes or something.
http://www.codeproject.com/Articles/342149/Using-WPConnect-instead-of-Zune-for-Windows-Phone
 

mcosmin222

Senior Member
May 1, 2012
1,130
287
0
I figured that when synced, the photochooser instantiated inside the app is turned off or something, and stays so until the constructor is called again, which would happen if the app is re-launched.

Kinda peculiar though...