Xamarin.Android 暗黙的インテントで「共有」に追加してみる
1 インテントフィルタの登録ブラウザのメニューに「共有」というのがあり、各種アプリにURLやタイトルを送れるようになっています。今回は、この共有メニューに自作のアプリを追加してみます。
「共有」に表示されるようにするには、categoryに「category.DEFAULT」、mimeTypeに「text/plain」、actionに「action.SEND」をそれぞれ登録しておく必要があります。
属性を使用して上記の3つをセットしたものは、下記の通りになります。
[Activity(Label = "MyApp")] [IntentFilter(new[]{Intent.ActionSend}, Categories = new[]{Intent.CategoryDefault},DataMimeType = "text/plain")] public class Activity2 : Activity{
登録が完了すると、ブラウザメニューの「共有」に、自作アプリが列挙されるようになります。
2 インテントからのデータ取得起動されたアプリ側で、起動元から送られたデータを取得するには、Intent.Extrasを使用します。
Intent.Extrasからデータを取り出すには、キー文字列が必要ですが、このキーは、Intent.Extras.KeySet()で列挙できます。下記のコードは、取得したデータを一覧したものです。
なお、起動時にIntent.Actionを確認することで、このアプリが起動された方法を確認することができます。
[Activity(Label = "MyApp")] [IntentFilter(new[]{Intent.ActionSend}, Categories = new[]{Intent.CategoryDefault},DataMimeType = "text/plain")] public class Activity2 : Activity{ protected override void OnCreate(Bundle bundle){ base.OnCreate(bundle); //このActivityが起動された方法を確認する if (Intent.Action==Intent.ActionSend) { var sb = new StringBuilder(); //呼び出し元からのデータを受け取る foreach (var key in Intent.Extras.KeySet()){//キーの一覧 var value = Intent.Extras.Get(key); sb.Append(string.Format("■key:{0}\r\n valse:{1}\r\n", key, value)); } Toast.MakeText(this,sb.ToString(),ToastLength.Short).Show(); } } }
キーには、次のようなものが見てとれます。
android.Intent.extra.TEXT : URL
android.Intent.extra.SUBJECT : タイトル
share_favicon
share_screenshot