読者です 読者をやめる 読者になる 読者になる

SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.Android 暗黙的インテントで「共有」に追加してみる

【 Xamarin 記事一覧 】

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{

登録が完了すると、ブラウザメニューの「共有」に、自作アプリが列挙されるようになります。

001

002

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();
        }
    }
}

003

キーには、次のようなものが見てとれます。
android.Intent.extra.TEXT : URL
android.Intent.extra.SUBJECT : タイトル
share_favicon
share_screenshot

【 Xamarin 記事一覧 】