質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

2814閲覧

ギャラリーから画像を取得したい

taichaso

総合スコア22

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2018/03/30 04:02

編集2018/03/30 04:03

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Xamarin Plugin の Media Plugin を使うとよいと思います。

なんらかの要件でこれが使えなかったとしても、これのソースコードは参考になると思います。

該当部分は、

の MediaPickerActivity.cs - GetFileForUriAsync あたりでしょうか。

この種の処理は通常の Android アプリ開発でもハマるところなので、 Java や Kotlin でも情報を調べると良いと思います。

投稿2018/03/30 04:47

amay077

総合スコア1075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taichaso

2018/03/31 00:13

ソースコードを参考にして実装してみて ダメそうだったらMediaPluginを検討してみようと思います。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問