こんにちは。エクセルソフトの田淵です。
iOS ではアプリ間のデータ共有に CFBundleDocumentType か Share Extensions を使います。Android はどうなんでしょう?Android は Activity 間もアプリ間も Intent という仕組みを使ってデータのやり取りをします。
準備
暗黙的インテントを受け取る Activity を用意して(MainActivity でも良いですが)、以下のような IntentFilter を設定します。
[Activity(Label = "XXXに追加")] [IntentFilter (new []{ Intent.ActionSend }, Categories = new []{ Intent.CategoryDefault }, DataMimeType = "text/plain" )] [IntentFilter(new[] { Intent.ActionSend }, Categories = new[] { Intent.CategoryDefault, Intent.Category }, DataMimeType = "image/*")]
Intent.ActionSend
, Intent.ActionSendMultiple
が基本でしょうか。Intent の Category については以下が詳しそうです。
ビルドすると、テキストや画像を共有すると一覧に出てくるようになります。
受け取り後の処理
例えば Intent.Action
が Intent.ActionSend
や Intent.ActionSendMultiple
かを確認して、その後で、MIME Type に応じて処理を分けることになります。
if (Intent.Action == Intent.ActionSend) { if (Intent.Type.Contains("text/")) { //テキスト処理 foreach (var key in Intent.Extras.KeySet()) { System.Diagnostics.Debug.WriteLine($"KEY:{key}, VALUE:{Intent.Extras.Get(key)}"); } } else if (Intent.Type.Contains("image/")) { //画像処理(調べ中。ごめんなさい。) } }
MIME Type についての公式ドキュメントはこちら。
Android では MIME Type がケースセンシティブでマッチングされるので注意。だそうです。この MIME Type は RFC で規定されている MIME Type と同じようです。
Activity で受け取ったデータを処理したら、MainActivity に移動するなり閉じるなりしてください。
未解決
画像の共有を試していたのは、標準の「フォト」アプリなんですが、そこから共有した画像を上記の Activity で受け取ると、android.intent.extra.STREAM
のキーに content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F137/REQUIRE_ORIGINAL/NONE/1995203343
が含まれています。型は Java.Lang.Object
です。
これを受け取り側の Activity で Stream をハンドルして、BitmapFactory.DecodeStreamAsync()
的なメソッドでファイルに落とし込んだりしたいんですよね。やり方をご存知の方がいたら教えてください。(Teratail 案件?)
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 も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。
以上です。