戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

作成したアプリを暗黙的インテントで呼べるようにする

作成したAndroidアプリを他のアプリから暗黙的に呼ばれるようにするには、AndroidManifest.xml<intent-filter> タグを追加する必要があります。
----------------------------------------------------------------------
API Reference: Intent

ソフトウェア技術ドキュメントを勝手に翻訳
Android 開発ガイド - フレームワークトピック - 4. インテントとインテントフィルタ
----------------------------------------------------------------------
暗黙的インテントではアプリの起動アクティビティ以外も呼ぶことができます。
アクティビティを呼び出すには、<intent-filter> タグに <action> タグ、および、<category> タグの"android.intent.category.DEFAULT" を追加する必要があります。

【AndroidManifest.xml】
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.inujirushi.android.sample"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
</intent-filter>
</activity>
</application>
</manifest>
<intent-filter> タグには <action><category><data> の3種類を設定することができます。

暗黙的に呼び出すには前述の <action android:name="***" /><category android:name="android.intent.category.DEFAULT" /> の記述は必須となりますが、その他の記述は任意となります。

1つのアクティビティには複数の <intent-filter> タグを追加することもできます
呼び出しは各 <intent-filter> タグの条件毎となります(上書き、追加はされない)

<action> タグと <category> タグの android:name には、独自の名称を指定することができます
独自の名称をつけることで、自分の作ったアプリだけをまとめたランチャー等を作ることもできます。
<activity
android:name=".SampleActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="inujirushi" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="hoge" />
<data android:scheme="http" />
</intent-filter>
</activity>

呼び出された Activity クラスでは、Intent から data を取得することができます。
値の受け渡しには、<intent-filter> に関係なく Intent#putExtra() を使うこともできます。
【Activity.java】
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// インテントを取得する
Intent intent = getIntent();

// 自アプリからの画面遷移、明示的インテントの場合には
// data を指定する必要が無いため null 対策を行うこと
Uri uri = intent.getData();
if (uri != null) Log.d("data", uri.toString());

// intent-filter に関係なく Intent#putExtra() で値を渡すことも可能
String extra = intent.getStringExtra("KEY");
if (uri != null) Log.d("extra", extra);
}
----------------------------------------------------------------------
暗黙的に呼び出す側は <action><data> の指定は必須になりますが、
<category> は絞り込み条件として任意指定となります。

暗黙的に呼び出すには『他のアプリを起動する(明示的と暗黙的)』で書いた方法を使います。
SampleActivity を対象としたときは、以下の方法で呼び出します。
【呼び出し側】
// インテントを生成する
Intent intent = new Intent();

// アクションを指定する
intent.setAction("inujirushi");

// カテゴリを追加する(指定しなくてもOK)
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.addCategory("hoge");

// Uriを設定する(scheme値 + ":" は必須、以降は自由)
intent.setData(Uri.parse("http://www.google.co.jp/"));

// intent-filter に関係なく値を渡す
intent.putExtra("KEY", "value");

// アプリを起動する
startActivity(intent);
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。