前提・実現したいこと
Xamarin.Formsで現在ギャラリーから画像を取得して表示する機能をつけようとしているのですがAndroidのみ表示されません
発生している問題・エラーメッセージ
DependencyServiceでAndroidの処理を呼び出し、実行しているのですが__OnActivityResult__での処理で問題が起きているようです
デバッグモードで確認したところ以下の処理でpathにnullが入っています
C#
1var projection = new[] { MediaStore.Images.Media.InterfaceConsts.Data }; 2using (var cursor = contentResolver.Query(data.Data, projection, null, null)) 3{ 4 if (cursor == null) 5 { 6 path = null; 7 } 8 else 9 { 10 var columnIndex = cursor.GetColumnIndexOrThrow(MediaStore.Images.Media.InterfaceConsts.Data); 11 cursor.MoveToFirst(); 12 path = cursor.GetString(columnIndex); 13 } 14}
条件式に引っかかってpathにnullが入るわけでなく、cursor.GetString(columnIndex);での処理でnullが返ってきます。
該当のソースコード
C#
1protected override void OnActivityResult(int requestCode, Result resultCode, global::Android.Content.Intent data) 2 { 3 try 4 { 5 base.OnActivityResult(requestCode, resultCode, data); 6 7 //ImageGalleryからの戻り値 8 if (requestCode == 0 && resultCode == Result.Ok) 9 { 10 var contentResolver = this.ContentResolver; 11 12 var projection = new[] { MediaStore.Images.Media.InterfaceConsts.Data }; 13 using (var cursor = contentResolver.Query(data.Data, projection, null, null)) 14 { 15 if (cursor == null) 16 { 17 path = null; 18 } 19 else 20 { 21 var columnIndex = cursor.GetColumnIndexOrThrow(MediaStore.Images.Media.InterfaceConsts.Data); 22 cursor.MoveToFirst(); 23 path = cursor.GetString(columnIndex); 24 } 25 } 26 //string型のファイルパスを渡す 27 App.PickupImagePath = GetSelectedFilePath(data); 28 } 29 } 30 catch(Exception ex) 31 { 32 System.Diagnostics.Debug.WriteLine("Error! :" + ex.Message); 33 } 34 } 35
試したこと
いくつかのサイトを調べたのですが、どのサイトも__ContentResolver__を使うやり方ですが、サンプルソースを複数試しても正しい動作は行われませんでした。
補足情報(FW/ツールのバージョンなど)
Xamarin.Forms v2.5.0.122203
Prism.Unity.Forms v7.0.0.396
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/31 00:13