こんにちは。エクセルソフトの田淵です。
本当は Share Extension を使わないといけないんです。テキストの共有をしたい場合は。でも、今回はテキスト「ファイル」を他のアプリから共有する方法をメモします。
公式ドキュメントはこれかな?
Share Extensions については以下が詳しいです。
次回以降にちゃんと Share Extensions でテキスト共有したいと思います。
メール添付されたテキストファイルを受け取りたい
テキストファイル、画像ファイル(png, jpg など)など、ファイルを処理したい場合は、Share Extensions を使わなくてもなんとかなります。
にもある、
CFBundleDocumentTypes
です。
準備
info.plist を編集します。
Xamarin Studio では Info.plist を開き、[詳細]タブの[ドキュメントの種類]から[ドキュメントタイプの追加]ボタンをクリックして、適切な「Types」を指定してあげれば大丈夫です。
ドキュメントタイプは公式の以下のサイトを参考にしてください。
今回は LSItemContentTypes
に public.text
と public.png
を指定してみました。
Visual Studio では、GUI では設定できないので、右クリックから[ファイルを開くアプリケーションの選択]をクリックし、[自動エディター付きセレクター]を選択して XML の最後に以下を追加します。
<key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeName</key> <string>TEXT</string> <key>LSHandlerRank</key> <string>Alternate</string> <key>LSItemContentTypes</key> <array> <string>public.text</string> </array> </dict> <dict> <key>CFBundleTypeName</key> <string>PNG</string> <key>LSItemContentTypes</key> <array> <string>public.png</string> </array> </dict> </array>
PNG の方は Xamarin Studio の GUI で設定したもので LSHandlerRank
の記述がありませんが、問題なく共有リストには出て来ました。
こんな感じ
受け取った後は
AppDelegate
クラスの OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
メソッドをオーバーライドして受け取り時の処理を追加します。受け取り後、専用の ViewController を呼ぶことも出来ると思います。
NSUrl
型の url
に共有されたデータの情報が含まれています。
url.Scheme
でデータのスキーマが取得できます。今回はファイルの共有なので「file」です。App Link で独自スキーマを設定した場合は、ここで処理を分岐してください。
file
スキーマの場合は、url.AbsoluteString
で string 型を取得できるので、今回はファイル名のみ LINQ で抜き出して Static な string のプロパティに格納しました。
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { try { if (url.Scheme == "file") { FileData.FileName = url.AbsoluteString.Split('/').Last(); } else if (url.Scheme == "MyApp") { // CustomUrlSchemeの対応 } return true; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.InnerException); } return false; }
ファイルを受け取ると、アプリ内の Documents/Inbox
にファイルが保存されます。
後は、ViewController で
var dir = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var file = Path.Combine(dir, "Inbox", FileData.FileName);
var text = File.ReadAllText(file);
で、Documents/Inbox
のファイルを読み込めます。Environment.GetFolderPath(Environment.SpecialFolder.Personal)
が Documents
フォルダなので、後は Combine するだけですね。
Environment.SpecialFolder
で取れる各種フォルダは、id:ch3cooh393 酢酸先生の
が参考になるかと思います。
Xamarin 気になった方は
是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 3 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソース や JXUG リンクページ に参考資料を纏めてますので併せてどうぞ。
Xamarin の導入支援サービスを始めました。ベースは基本的なアプリを一緒に作ることで Xamarin を使えるようになって頂く内容ですが、ご要望に応じて講習内容のカスタマイズも可能です。詳しくは田淵までお問い合わせください(^^)
有償セミナー、トレーニング | Xamarin : XLsoft エクセルソフト
Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。
私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)、Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。
以上です。