ウェブアプリケーション,インジェクション,コマンドインジェクション

androidアプリケーション開発の基本

アクティビティへのリンク

Linking Activities

リンクアクティビティの管理は、
これから作る様々なAndroidアプリケーションの
他のアクティビティへの
リンクを作るのに様々な方法を可能にしてくれます。
いまから作るアプリケーションに2つのアクティビティがあると
仮定してプログラムを書いてみます。
以下のAndroidManifest.xmlファイルは、
2つのアクティビティクラス、
MainActivityとActivity2を使っています。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.learn2develop.linking"
android: versionCode="1"
android: versionName="1.0" >

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

<application
   android: icon="@drawable/ic_launcher"
   android: label="@string/app_name"
   android: theme="@style/AppTheme" >

<activity
   android: name=".MainActivity"
   label="@string/title_activity_main"
   <intent-filter>
     <action android: name="android.intent.action.MAIN />
     <categoty android: name="android.intent.categoty.LAUNCHER" />
   </intent-filter>
<activity>

<activity>
   android: name=".Activity2"
   android: label="@string/app_name" >
   <intent-filter>
     <action android: name="net.learn2develop.Activity2" />
     <categoty android: name="android.intent.category.DEFAULT" />
   </intent-filter>
</activity>

</application>
</manifest>

今現在MainActivityの動作中だとすると、
Activity2にリンクするために以下のコードを使えます。

package net.learn2develop.linking;

import android.app.Acrivity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity{

   @Override
   public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     //---link to Activity2---
     Intent i = new Intent("net.learn2develop.Activity2");
     startActivity(i);

     }
   }

他のアクティビティにリンクするために、Intentオブジェクトを作り、
ターゲットとなるアクティビティの名前への
コンストラクタをセットします。
(AndroidManifest.xmlファイルの<action>要素にセットするように)
そして、アクティビティの開始させるためにstartActivity()メソッドを
呼び出します。または、Intentオブジェクトを作り、
ターゲットとなるアクティビティの名前をセットするために
setAction()メソッドを呼び出します。

//---link to Activity2---
Intent i = new Intent();
i.setAction("net.learn2develop.Activity2");
startActivity(i);
このコード部は、同じアプリケーションの中にあるアクティビティの
呼び出しによく使われます。
もし、作っているアプリケーション内のアクティビティを
呼び出したくなった場合には、
下記のようにクラス名を使って呼び出すこともできます。
//---link to Activity2---
Intent i = new Intent(this, Activity2.class);

もし、昔作った他のアプリケーションから他のアクティビティを
呼び出させたく無い場合には、単純に、<action>要素を
<intent-filter>要素から削除するだけで良いです。

<activity
  <android:name=".Activity2"
  <android:label="@string/app_name" >
  <intent-filter>
    <!--
      <action android:name="net.learn2develop.Activity2" />
    -->

    <category android:name="android.intent.category.DEFAULT" />
  <intent-filter>
<activity>

もし、デバイスに無いアクティビティを呼びだそうとしている
場合には、アプリケーションはクラッシュします。
その時ディスプレイには、
Unfortunately, Linking has stopped.
と表示されます。
アプリケーションが不意に止まらないようにするために、
Intent.createChooser()メソッドと一緒に、
startActivity()メソッドを呼び出します。
このcreateChooser()メソッドは、Intentオブジェクトをとり、
アクティビティが見つからなければ文字列を表示します。
または、複数のアクティビティがIntentオブジェクトを
満たしているとわかったときなどがそうです。
Intent i = new Intent("net.learn2develop.Activity2");
startActivity(Intent.createChooser(i, "choose an application"));
アクティビティが見つからなければ
No apps can perform this action
と表示されます。
複数のアクティビティが見つかった場合には、
アプリケーションの名前が
並んで表示されアプリケーションが選べる様に表示されます。
createChooser()メソッドを使うときに注意するのは、
アクティビティ名を指定することが必要になることです。
(前の例でいうと、net.learn2develop.Activity2のように)
指定するアクティビティ名は実行させているもので、
そのクラス名ではありません。
以下のコードのようにすると動きません。
//---the following will never link to Activity2---
Intent i = new Intent(this, Activity2.class);
startActivity(Intent.createChooser(i, "Choose an application"));

ホーム
便利堂ロゴ
inserted by FC2 system