SSブログ

Android エミュレータが、Waiting for Home で停止している [Android]

Androidアプリの開発対象を、Xperia acro から Xperia Z に変更するとともに、Android 仮想デバイス・マネージャーの設定を変更したらエミュレータが”Waiting for HOME ('android.process.acore') to be launched...”と表示したまま先に進まなくなった。原因調査と実施した内容を書いておく。

この画面のまま停止先に進まない。

image

主な原因としてVM ヒープとSDカードの値を大きくすれば良いとの情報が多くみかけられたので、それぞれ大きな値を設定したが改善しなかった。

さらに、プロジェクトのクリーンおよび仮想デバイスの再作成を行ったところ起動するようになった。

起動した。

image

以下にそれぞれの実施方法を記す。

仮想デバイス・マネージャーの設定

image

  • VM ヒープを”64”から”525”へ
  • SD カードを”0”から”4GiB”へ
  • 「ホストGPUを使用する」にチェック。 ← 起動には関係ないが、明らかに起動が速くなった。

プロジェクトのクリーン方法

Eclipseのメニューから「プロジェクト」、「クリーン」と選択する。

仮想デバイスの再作成

仮想デバイス・マネージャーから対象のAVDを選択し「削除」ボタンをして削除、つぎに「新規」ボタンから新規作成をおこなう。

image

 

参考サイト(貴重な情報を、ありがとうございました。)


Androidを開発者向けに設定する方法 [Android]

Android端末で独自のアプリケーションを動作させるには下記の設定が必要となります。

 

Andoroid 2.3 の場合

  • 「USBデバッグ」有効 (「設定」、「アプリケーション」、「開発」の中)
  • 「提供元不明のアプリのインストール」許可 (「設定」、「アプリケーション」の中)

Android 4.2 の場合

  • 「USBデバッグ」有効
  1. 「設定」、「端末情報」と押します。「ビルド番号」を数回タップすると「デベロッパーになるまであと○ステップです。」と表示されます。この○が”0”になるまでタップを続けます。(全部で7回押す。)
  2. 「あなたは今開発者になりました」と表示されます。
  3. 「設定」の下に「{}開発者向けオプション」が表示されます。
  4. 「USBデバッグ」を有効にする。
  • 「スリープモードにしない」有効(「{}開発者向けオプション」内)オンにしておくと充電中はスリープしなくなるのでテストやデバッグがやりやすくなります。
  • 「提供元不明のアプリのインストール」許可 (「設定」、「セキュリティ」の中)

メモ

表示させた「{}開発者向けオプション」を非表示にする方法

  1. 「設定」、「アプリ」とタップする。
  2. 「すべて」タブを選択し、「設定」アプリをタップする。
  3. 「データを削除」ボタンを押せば、「{}開発者向けオプション」が消えます。

 

スマホの画面スクリーンショットは後から追加するかもしれません!


Androidプログラミングの基礎[8] メニュー [Android]

今回のテーマは「メニューとノーティフィケーション」です。

第8回: メニューとノーティフィケーション

1.オプションメニューを作る

Androidで頻繁に利用されるユーザーインターフェイスの1つに「オプションメニュー」がありまう。「MENU」ボタンを押すことで表示されます。

オプションメニューは最大6つまで表示され、7つ以上になると6つ目が「その他」となります。

◎ メニュー関連のクラス・インターフェイス

オプションメニュー、コンテキストメニューはともに、Menuインターフェイス(android.view.Menu)により管理されている。

⇒ オプションメニュー関連のイベント

「MENU」ボタンが押されるとActivityクラスのコールバックメソッドが呼ばれる。

メソッド 解説
boolean onCreateOptionsMenu 「MENU」ボタンが押されたときに呼ばれる
boolean onPrepareOptionMenu オプションメニューが表示される直前に呼ばれる
boolean onOptionMenuItemSelected オプションメニューの項目がタップされたときに呼ばれる

⇒ オプションメニュー用のXMLファイル

オプションメニュー用のXMLファイルは、プロジェクト作成時「res/menu」フォルダ内に作成されています。ファイル名はレイアウトXMLファイルと同じとなっている。

◎ サンプル

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 MenuSample
プロジェクト名 MenuSample
パッケージ名 jp.andsys.android.menusample
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 MenuSampleActivity
レイアウト名 main
ナビゲーション・タイプ None

menu_sample.xml の編集(メニュー用XMLファイル)

”MenuSample/res/menu/menu_sample.xml”

image

MenuSampleActivity.java の編集

”MenuSample/src/jp/andsys/android/menusample/MenuSampleActivity”

image

image

⇒ オプションメニューの初期化

onCreateOptionsMenu メソッド

機能 「メニュー」ボタンが押されたときに呼ばれるコールバックメソッド
書式 boolean onCreateOptionsMenu ( Menu menu )
引数 menu : 作成するオプションメニュー

inflate メソッド

機能 メニューXMLファイルからメニューを構築する
書式 void inflate ( int menuRes, Menu menu )
引数 menuRes : メニューXMLファイル名
menu : 項目を追加する対象

⇒ オプションメニューに対する操作

onPrepareOptionsMenu メソッド

機能 メニューが表示される直前に呼ばれるコールバックメソッド
書式 boolean onPrepareOptionsMenu ( Menu menu )
引数 menu : 操作項目を操作する対象

findItem メソッド

機能 指定したリソースIDのメニュー項目を取得する
書式 MenuItem findItem ( int id )
引数 id : メニュー項目のリソースID

setEnabled メソッド

機能 メニュー項目の有効/無効を指定する
書式 MenuItem setEnabled ( boolean enabled )
引数 enabled : 有効の場合true、無効の場合false

⇒ オプションメニューが選択された時の処理

onOptionsItemSelected メソッド

機能 メニュー項目をタップした時に呼ばれるコールバックメソッド
書式 boolean onOptionsItemSelected ( MenuItem item )
引数 item : タップされたメニュー項目

⇒ 実行

「MENU」ボタンを押すとメヌーが表示されます。

image

また各項目を押すと押した項目がトーストにって表示されます。

 

2.コンテキストメニューを作る

コンテキストメニューは状況に応じて表示するメニューで、画面の長押しでポップアップされます。

◎ コンテキストメニュー関連のクラス・インターフェイス

コンテキストメニューの操作は、ContextMenuインターフェイス(android.view.ContextMenu)で行います。

⇒ コンテキストメニュー関連のイベント

ビューが長押しされると、以下のようなActivityクラスのコールバックメソッドが呼ばれる。

メソッド 解説
void inCreateContextMenu ビューが長押しされたときに呼ばれる
boolean onContextMenuItemSelected コンテキストメニューの項目がタップされたときに呼ばれる

◎ サンプル

main.xml の編集

”MenuSample/res/layout/main.xml”

image

コンテキストメニュー用のレイアウトXMLを追加する。

Eclipseメニューから「ファイル」、「新規」、「その他」を実行し「Android」「AndroidXMLファイル」を選択する。

設定は以下の内容とする。

設定項目 入力値/選択項目
リソース・タイプ Menu
プロジェクト MenuSample
ファイル context_menu
ルート要素 menu

context_menu.xml の編集

”MenuSample/res/menu/context_menu.xml”

image

MenuSampleActivity.java の編集

”MenuSample/src/jp/andsys/android/menusample/MenuSampleActivity”

image

image

image

⇒ コンテキストメニューの作成

onCreateContextMenu メソッド

機能 ビューが長押しされたときに呼ばれるコールバックメソッド
書式 void onCreateContextMenu ( ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo )
引数 menu : 項目を作成するコンテキストメニュー
v : 長押しされたビュー
menuInfo : コンテキストメニューの作成に関する追加情報

⇒ コンテキストメニューが選択された時の処理

onContextItemSelected メソッド

機能 コンテキストメニューの項目がタップされたときに呼ばれるコールバックメソッド
書式 boolean onContextItemSelected ( MenuItem item )
引数 item : 選択された

setText メソッド

機能 引数で渡した文字列をクリップボードへ格納する
書式 void setText ( CharSequence text )
引数 text : クリップボードに格納する文字列

getText メソッド

機能 クリップボードに格納されている文字列を取得
書式 CharSequence getText ()
引数  

⇒ 実行

テキストボックスを長押しするとメニューが現れます。このメニューから文字列の操作(編集、文字列の選択等)を行います。

image

次に選択された文字列を長押しするとカット&ペーストメニューが現れます。

image

カット&ペーストした文字列は上部のラベルエリアに張り付けることも可能です。

image

 

3.ノーティフィケーション

ノーティフィケーションとは、システムのステータスバーを開いた領域にアイコンとメッセージで通知を行うインターフェースのこと。

◎ ノーティフィケーションに関連するクラス

表示手順

  1. Notificationクラスのインスタンスを生成
  2. ノーティフィケーションをタッチした時にアクティビティを起動するためのインテントを準備
  3. インテントを元に、PendingIntentクラスのインスタンスを生成
  4. ノーティフィケーションにPendingIntentをセット
  5. NotificationManagerにノーティフィケーションを登録

⇒ Notificationクラス

Notification クラスのコンストラクタで基本設定を定義する。

書式 Notification ( int icon, CharSequence tickerText, long when )
引数 icon : ノーティフィケーションを受信した時にステータスバーに表示されるアイコンのリソースID
tickerText : ノーティフィケーションを受信したときにステータスバーに表示されるテキスト
when : ノーティフィケーションに表示する時刻

⇒ PendingIntentクラス

PendingIntentクラス(android.app.PendingIntent)は、ノーティフィケーションがタップされたタイミングでインテントを送信します。

⇒ NotificationManager

NotificationManagerクラス (android.app.NotificationManager)は、Notificationオブジェクトを登録し、notifyメソッドでステータスバーに表示する。

◎ サンプル

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 NotificationSample
プロジェクト名 NotificationSample
パッケージ名 jp.andsys.android.notificationsample
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 NotificationSampleActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集(メニュー用XMLファイル)

”NotificationSample/res/layout/main.xml”

image

NotificationSampleActivity.java の編集

”NotificationSample/src/jp/andsys/android/notificationsample/NotificationSampleActivity”

image

getActivity メソッド

機能 PendingIntentインテントを登録する
書式 PendingIntent getActivity ( Context context, int requestCode, Intent intent, int flags )
引数 context : コンテキスト
requestCode : 使われていない「0」を渡す
intent : 登録するインテント
flags : 実際の送信が発生したときに渡すフラグ

setLatestEventInfo メソッド

機能 ノーティフィケーションのイベント情報を設定する
書式 void setLatestEventInfo ( Context context, CharSequence Title, CharSequence Text, Pending Intent )
引数 context : 自身(this)を渡す
Title : タイトル
Text : 表示するメッセージ
Intent : PendingIntentのインスタンス

notify メソッド

機能 ノーティフィケーションの表示
書式 void notify ( int id, Notificaton notification )
引数 id : ノーティフィケーションID
notification : Notificationのインスタンス

⇒ 実行

image

◎ その他の通知オプション

サウンド再生、バイブレーション、通知LEDランプ点灯、数値バッジの表示機能を追加する。

NotificationSampleActivity.java の編集

”NotificationSample/src/jp/andsys/android/notificationsample/NotificationSampleActivity”

image

Androidのデフォルト設定を使用する場合は、defaultフィールドを使用する。

⇒ 通知音

notification.defaults |= Notification.DEFAULT_SOUND;

⇒ バイブレーション

notification.defaults |= Notification.DEFAULT_VIBRATE;

⇒ 通知LED

notification.defaults |= Notification.DEFAULT_LIGHTS;

⇒ 数値アイコン表示

notification.number = 1;

実行

image

以上で「メニューとノーティフィケーション」を終了します。

 

本記事は以下の参考書を元にしています。


Androidプログラミングの基礎[7-2] ダイアログ [Android]

今回のテーマは「ダイアログを使いこなす」後編です。

第7回: ダイアログを使いこなす(後編)

 4.プログレスダイアログ

時間のかかる処理の進捗度合いを知らせる水平および円形のスタイルを持つプログレスバーをもつダイアログについて説明する。

プログレスダイアログの作成には、ProgressDialogクラス(android.app.ProgressDialog)を利用する。

◎ サンプル

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 Progress
プロジェクト名 Progress
パッケージ名 jp.andsys.android.progreaa
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 ProgressActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”InternalIOres/res/layout/main.xml”

image

ProgressActivity.java の編集

”Progress/src/jp/andsys/android/progress/ProgressActivity”

image

image

image

⇒ 円形のプログレスダイアログ

setProgressStyle メソッド

機能 プログレスバーの形状を設定する
書式 void setProgressStyle ( int style )
引数 style : 形状を定数で指定する
STYLE_SPINNER : 円形スタイル
STYLE_HORIZONTAL : 水平方向スタイル

⇒ 水平方向のプログレスダイアログ

setMax メソッド

機能 プログレスバーの最大値を設定
書式 void setMax ( int max )
引数 max : 最大値

handleMessage メソッド

機能 メッセージを受信したら処理を開始する
書式 void handleMessage ( Message msg )
引数 msg : 受信したメッセージ

incrementalProgressBy メソッド

機能 プログレスバーの値を増やす
書式 void incrementalProgressBy ( int diff )
引数 diff : 増分する値

sendEmptyMessageDelayed メソッド

機能 自信にメッセージを送信する
書式 boolean sendEmptyMessageDelayed ( int what, long delayMillis )
引数 what : 送信するメッセージ
delayMillis : 何ミリ秒後に送信するか

⇒ 実行

「円形スタイル」

image

「水平スタイル」

image

 

5.ピッカーダイアログ

特殊なダイアログとして、日付を選択するダイアログと時刻を選択するダイアログが用意されている。

◎ 日付ピッカーダイアログ

日付ピッカーダイアログは、DataPickerDialogクラス(android.app.DataPickerDialog)のコンストラクタを利用して作成する。

⇒ 日付ダイアログのイベントリスナー

日付ピッカーダイアログには、専用のイベントリスター DataPickerDialog.onDateSetListener インターフェースが用意されている。

◎ サンプル

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 DatePicker
プロジェクト名 DatePicker
パッケージ名 jp.andsys.android.datepicker
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 DatePickerActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”DatePicker/res/layout/main.xml”

image

DatePickerActivity.java の編集

”DatePicker/src/jp/andsys/android/datepicker/DatePickerActivity”

image

onDateSet メソッド

機能 日付が指定されたら呼ばれるコールバックメソッド
書式 void onDateSet ( DatePicker view, int year, int monthOfYear, int dayOfMonth )
引数 view : DatePickerDialogで使われているDatePickerビュー
year : 設定された年
monthOfYear : 設定された月
dayOfMonth : 設定された日

⇒ 実行

「日付」テキストボックスをクリックすると現れ、「Set」ボタン入力で日付が入力される。

image

◎ 時刻ピッカーダイアログ

時刻ピッカーダイアログは、TimePickerDialogクラス(android.app.TimePickerDialog)のコンストラクタを利用する。

⇒ 時刻ピッカーダイアログのイベントリスナー

時刻ピッカーダイアログには、専用のイベントリスター TimePickerDialog.onTimeSetListener インターフェースが用意されている。

◎ サンプル

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 TimePicker
プロジェクト名 TimePicker
パッケージ名 jp.andsys.android.timepicker
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 TimePickerActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”DatePicker/res/layout/main.xml”

image

TimePickerActivity.java の編集

”TimePicker/src/jp/andsys/android/timepicker/TimePickerActivity”

image

onTimeSet メソッド

機能 時刻が指定されたら呼ばれるコールバックメソッド
書式 void onTimeSet ( TimePicker view, int hourOfDay, int minute )
引数 view : TimePickerDialogで使われているTimePickerビュー
hourOfDay: 設定された「時」
minute : 設定された「分」

⇒ 実行

「時間」テキストボックスをクリックすると現れ、「Set」ボタン入力で時間が入力される。

image

以上で「ダイアログを使いこなす」後編を終了します。

 

本記事は以下の参考書を元にしています。


Androidプログラミングの基礎[7-1] ダイアログ [Android]

今回のテーマは「ダイアログを使いこなす」前篇です。

第7回: ダイアログを使いこなす(前篇)

1.アラートダイアログ

ダイアログを表示するには、AlartDialogクラス(android.os.AlartDialog)を使う。

◎ アラートダイアログを構成するクラス

AlartDialog.Builderのコンストラクタ

書式 AlartDialog.Builder( Contex contex )
引数 ダイアログを生成する対象のオブジェクト

http://developer.android.com/reference/android/app/AlertDialog.Builder.html

⇒ ダイアログのイベントリスナー

ダイアログには、DialogInterface(android.content.DialogInterface)という専用のインターフェースが用意されており、内部にダイアログ用のリスナーインターフェースが定義されている。

◎ サンプル

簡単なメッセージを表示するダイアログ

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 Dialog
プロジェクト名 Dialog
パッケージ名 jp.andsys.android.dialog
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 DialogActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”InternalIOres/res/layout/main.xml”

image

DialogActivity.java の編集

”DialogActivity/src/jp/andsys/android/dialog/DialogActivity”

image

setTitle メソッド

機能 ダイアログに表示するタイトルを設定
書式 AlartDialog.Builder setTitle ( CharSequence title )
引数 title : タイトルに表示する文字列

setMessage メソッド

機能 ダイアログに表示するメッセージを設定
書式 AlartDialog.Builder setMessage ( CharSequence message)
引数 message : メッセージに表示する文字列

⇒ 実行

「ダイアログ」表示ボタンを押すとアラートダイアログが現れる。

image

 

2.アクティビティへのダイアログ実装

Activityクラスの持つコールバックメソッドによりダイアログの状態を監視させる。これにより意図しない場面(例えば画面の回転時に消える)でダイアログが消滅することを防ぐことができる。

◎ サンプル

DialogActivity.java の編集

”DialogActivity/src/jp/andsys/android/dialog/DialogActivity”

image

⇒ 実行

画面回転後もダイアログが表示されている。

image

 

3.いろいろなアラートダイアログ

◎ サンプル

いろいろなアラートダイアログが開くアプリケーションを作成する。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 AlertDialogSamples
プロジェクト名 AlertDialogSamples
パッケージ名 jp.andsys.android.alertdialogsamples
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 AlertDialogSamplesActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”AlartDialogSamples/res/layout/main.xml”

image

AlertDialogSamplesActivity.java の編集

”AlertDialogSamplesActivity/src/jp/andsys/android/alertdialogsamples/AlertDialogSamplesActivity”

image

image

image

image

image

image

実行します。

image

⇒ ボタンのあるダイアログ

image

⇒ リストダイアログ

image

⇒ ラジオボタンダイアログ

image

⇒ チェックボックスダイアログ

image

⇒ カスタムダイアログ

image

今回のテーマ「ダイアログを使いこなす」前篇を終了します。

 

本記事は以下の参考書を元にしています。


Android エミュレータ画面回転しない [Android]

Androidアプリケーション開発で使用するAndroidエミュレータの画面回転は”ctrl + F11”で行うことが出来る。しかしエミュレータは横を向くが画面は回転しない。この問題についての対応方法を調査した。

image

Web上に「Android 仮想デバイス・マネージャー」でハードウエアのキーボードオプションを変更すことで対応可能とあったので実施した。

① AVDの起動

Eclipseのメニューから「Android 仮想デバイス・マネージャー」を起動する。

image

② 編集

「Android Virtual Devices」タブの対象となるAVDを選択し「編集」ボタンを押す。

image

③ プロパティの変更

「キーボード: ハードウェア・キーボードあり」にチェックを入れ「OK」ボタンを押す。

image

”ctrl + F11”でエミュレータを横にする。画面も追従するようになりました。

image

以上


Androidプログラミングの基礎[6] ファイル入出力 [Android]

今回のテーマは「ストレージへのファイル入出力」です。

第6回: ストレージへのファイル入出力

Androidが管理するさまざまなストレージに対するファイルの入出力方法について説明する。

1.内部ストレージへのファイル入出力

◎ ストリームの取得手段

openFileOutput メソッド

機能 ファイルに書き込むための出力すストリームを取得
書式 FileOutputStream openFileOutput( Sting name, int mode )
引数 name : 書き込むファイル名
mode : 操作モード
MODE_PRIVATE : ジアプリケーションのみアクセス可能
MODE_APPEND : 追加書き込みモードで開く
MODE_WORLD_READABLE : 他のアプリケーションから読み書き可能
MODe_WPRLD_WRITABLE : 他のアプリケーションから書き込み可能

name にファイルパスを記述することはできず、ファイルパスは、「/data/data/<パッケージ名>/files」固定となる。

openFileInput メソッド

機能 ファイルから読み込むための入出力ストリームを取得
書式 FileInputStream openFileInput( Sting name )
引数 name : 書き込むファイル名

◎ サンプル

テキストの読み書きを行うアプリケーションを作成する。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 InternalIO
プロジェクト名 InternalIO
パッケージ名 jp.andsys.android.internalio
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 InternalIOActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”InternalIOres/res/layout/main.xml”

image

InternalIOActivity.java の編集

”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”

image

⇒ ファイルへの書き込み

fos = openFileOutput(FILENAME, MODE_PRIVATE);
fos.write(memoText.getText().toString().getBytes());

⇒ ファイルからの読み込み

fis = openFileInput(FILENAME);
byte[] readBytes = new byte[fis.available()];

⇒ 実行

テキストボックスに文字を入力し「SAVE」ボタンを押します。

image

確認

① DDMSパースペクティブを開く

Eclipseメニューから「ウインドウ」、「パースペクティブを開く」、「その他」を実行し、「DDMS」を選択し「OK」ボタンを押す。

② エミュレータの選択

「デバイス」タブでデバッグ対象のエミュレータまたは端末を選択します。次に右側の「ファイル・エクスプローラ」を選択し”data/data/jp.andsys/android/internalio/files”ホルダーを開き、memo.txtファイルがあることを確認します。

image

③ ファイルのダウンロード

memo.txtを選択し、「端末からファイルを取得」ボタンを押します。

image

④ ファイルを開いて内容を確認する。

image

 

2.他のアプリケーションのファイルへのアクセス

◎ サンプル

InternalIOで作成したファイルを読み込むアプリケーションを作成する。

InternalIOで書き込んだファイルを、他のファイルから読み込めるように権限を変更する。

InternalIOActivity.java の編集

”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”

image

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 OtherAppIO
プロジェクト名 OtherAppIO
パッケージ名 jp.andsys.android.otherappio
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 OtherAppIOActivity
レイアウト名 main
ナビゲーション・タイプ None

main.xml の編集

”OtheAppIO/res/layout/main.xml”

image

OtheAppIO.java の編集

”OtheAppIO/src/jp/andsys/android/othrappio/OtheAppIOActivity”

image

createPackageContext メソッド

機能 パッケージ名を指定してコンテキストを生成する
書式 Context createPackageContext ( String packageName name, int flags )
引数 PackageName : パッケージ名
flags : セキュリティのためのフラグ
CONTEXT_INCLUDE_MODE : 生成するコンテキストに対するセキュリティを有効にする
CONTEXT_IGNORE_MODE : 生成するコンテキストに対するセキュリティをすべて無視する

⇒ 実行

ファイルを読み込んで表示できました。

image

 

3.外部ストレージへのファイル入出力

外部ストレージとは多くの場合取り外し可能なSDカードとなっているが、携帯端末よっていは取り外し不可能な内部のメモリ領域が外部ストレージとなっていいることがある。

⇒ 外部ストレージのセキュリティ

セキュリティ保護はありません、外部ストレージに保存されたファイルはすべてのアプリケーションから読み書きが可能。

⇒ 外部ストレージのチェック

使用する前に使用可能か確認する。メディアがマウントされ、認識されているか、リードオンリーになっていないか、等チェックする必要がある。

⇒ Environmentクラスとは

Environmentクラス(android.os.Environment)はシステム環境へのアクセスを提供している。

Environmentの主なメソッド

メソッド 解説
String getExternalStotageState メインの外部ストレージの現在の状態を返す
File getExternalStorageDirectory 外部ストレージのディレクトリを取得する
File getDataDirectory データディレクトリを取得
File getDownloadCacheDirectory ダウンロードキャッシュ用のディレクトリを取得

◎ サンプル

テキストボックスに入力した内容を外部ストレージにファイルとして保存および、それを読みだして表示する。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 ExternalIO
プロジェクト名 ExternalIO
パッケージ名 jp.andsys.android.externalio
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 ExternalIOActivity
レイアウト名 main
ナビゲーション・タイプ None

AndroidManifest.xml の編集

”ExternalIO/AndroidManifest.xml”

パーミッションを記述

image

main.xml の編集

”ExternalIO/res/layout/main.xml”

image

OtheAppIO.java の編集

”ExternalIO/src/jp/andsys/android/externalio/ExternalIOActivity”

image

image

image

⇒ 外部ストレージのチェック

getExternalStorageStateメソッド 戻り値

戻り値 解説
MEDIA_BAD_REMOVAL アンマウントされる前にメディアが取り出された
MEDIA_CHECKING メディアが存在しディスクチェック中
MEDIA_MOUNTED メディアが存在し読み取り/書き込みアクセスでマウントされている
MEDIA_MOUNTED_READ_ONLY メディアが存在し読み取り専用アクセスでマウントされている
MEDIA_NOFS ディアが存在するが空になっているかサポートされていないファイルシステムを使用しています
MEDIA_REMOVED メディアが存在しない
MEDIA_SHARED メディアがマウントされずUSBマスストレージとして共有されている
MEDIA_UNMOUNTABLE メディアが存在するがマウントできない
MEDIA_UNMOUNTED メディアが存在するがマウントされていない

⇒ 外部ストレージのパスを取得する

getExternalStorageDirectoryメソッドでパスを取得する。エミュレータではルートフォルダとして「/sdcard」が取得できる。

ファイルは外部ストレージフォルダ以下の「/Android/data/<パッケージ名>/files/」フォルダに書き込む。

実行

テキストを「save」および「load」した

image

ファイルは以下にできた。

image

ファイルをテキストエディタで開いた。

image

以上で「ストレージへのファイル入出力」を終了します。

 

本記事は以下の参考書を元にしています。


Androidプログラミングの基礎[5] 共有プリファレンス [Android]

今回のテーマは「共有プリファレンス」です。

第5回: 共有プリファレンスと設定画面

Androidで利用可能なデータ保存方法の一つである共有プリファレンスについて説明する。

1.共有プリファレンスを使う

共有プリファレンス(SharedPreference)は、キーと値とのペアを保存、取得可能とする機能。

◎ SharedPreferenceインターフェイス

共有プリファレンスから設定を取得、変更すうためのインターフェース。

⇒ SharedPreferences.Editインターフェイス

設定の変更を保存する場合に、データが一貫した状態となるよう制御する。

◎ 共有プリファレンスの取得

共有プリファレンスを作成する2つのメソッド

⇒ Context#getSharedPreferencesメソッド

アプリケーション内外で共通して使用可能な共有プリファレンスを作成する。

⇒ Activity#getPreferencesメソッド

アクティビティ専用の共有プリファレンスを作成する。

◎ サンプル

画面で入力した項目を共有プリファレンスに保存する。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 PreferencesSample
プロジェクト名 PreferencesSample
パッケージ名 jp.andsys.android.preferencessample
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 PreferencesSampleActivity
レイアウト名 main
ナビゲーション・タイプ None

strings.xml の編集

”PreferencesSample/res/values/strings.xml”

image

preferences_sample.xml の編集

”PreferencesSample/res/menu/preferences_sample.xml”

image

main.xml の編集

”PreferencesSample/res/layout/main.xml”

image

image

PreferencesSampleActivity.java の編集

”PreferencesSample/src/jp/andsys/android/preferencesample/PreferencesSampleActivity”

image

image

⇒ 共有プリファレンスの作成

SharedPreferences pref =
                getSharedPreferences("PreferenceFile", MODE_PRIVATE);

PreferenceFile : 共有プリファレンス名

MODE_PRIVATE : 公開モード

⇒ 共有プリファレンスの読み込み

getString メソッド

機能 共有プリファレンスの設定項目をString型で取得する
書式 String getString( String key, String defValue )
引数 key : 取り出したい設定項目の名前
defValue : デフォルト値

getBoolean メソッド

機能 共有プリファレンスの設定項目をBoolean型で取得する
書式 Boolean get( String key, boolean defValue )

getInt メソッド

機能 共有プリファレンスの設定項目をInt型で取得する
書式 Int getInt( String key, Int defValue )

⇒ 共有プリファレンスへの書き込み

putString メソッド

機能 共有プリファレンスにString型の値を登録する
書式 SharedPreferences.Editor putString( String key, String Value )
引数 key : 設定する項目のキー名
defValue : 設定する値

putBoolean メソッド

機能 共有プリファレンスにBoolean型の値を登録する
書式 SharedPreferences.Editor putBoolean( String key, boolean Value )

putInt メソッド

機能 共有プリファレンスにInt型の値を登録する
書式 SharedPreferences.Editor putString( String key, Int Value )

⇒ プリファレンスのクリア

共有プリファレンスをクリアするには、clearメソッド使います。commitメソッドを続けて使わないと反映されない。

実行

実行画面でタイトル入力、チェックボックスON、リストを青にし「保存」ボタンを押す。

image

チェックボックスOFF、リストを緑にして「取得」ボタンを押す。

image

保存された値を読み込んで表示された。

image

 

2.デフォルトの共有プリファレンスを使う

アプリケーションにはデフォルトの共有プリファレンスが1つ用意されている。これの使い方について調査した、

◎ サンプルの修正

PreferencesSampleActivity.java の編集

”PreferencesSample/src/jp/andsys/android/preferencesample/PreferencesSampleActivity”

image

image

getDefaultSharedPreferences メソッド

機能 デフォルトの共有プリファレンスを取得する
書式 SharedPreferences getDefaultSharedPreferences ( context context )
引数 context : デフォルトの共有プリファレンスを取得するオブジェクト

 

3.簡単に設定画面を作る

Android では簡単に設定画面を作る方法としてPreferencesActivityクラス(android.preference.PreferenceActivity)が用意されている。

◎ 設定画面のXML

設定画面のXMLはres/xml フォルダに格納する。

設定画面用のXML要素

要素 概説
PreferenceScreen 設定画面の最上位要素
PreferenceCategory 設定項目をカテゴリー分けする
EditTextPreference 文字列を入力するタイプの設定項目。タップすると文字列を入力するためのダイアログを表示する
CheckBoxPreference チェックボックスの設定項目
ListPreference リストボックスの設定項目。タップすると選択ダイアログが開く

主な属性

属性 解説
android:key 共有プリファレンスを保存するときのキー
android:title 設定項目のタイトル。PreferenceCategory要素の場合は、設定項目のカテゴリーを表すヘッダーとして表示
android:summary 設定項目の要約

 

◎ サンプル

設定画面を追加する。

⇒ 文字列リソースの追加

strings.xml の編集

”PreferencesSample/res/values/strings.xml”

image

⇒ 設定画面の作成

sample_preference.xml の作成 および 編集

”PreferencesSample/res/xml/sample_preference.xml”

Eclipseのメニューから「ファイル」、「新規」、「その他」と実行し、「Android」、「AndroidXMLファイル」を選択します。

設定項目 入力値/選択項目
リソース・タイプ Preference
プロジェクト PreferencesSample
ファイル sample_preference
ルート要素 PreferenceScreen

image

⇒ 設定画面用アクティビティの作成

Eclipseのメニューから「ファイル」、「新規」、「クラス」と実行し以下の内容でクラスを作成する。

SamplePreferenceActivity.java  の作成 および 編集

”PreferencesSample/src/jp/andsys/android/preferencesample/SamplePreferenceActivity.java”

設定項目 入力値/選択項目
パッケージ jp.andsys.android.preferencessample
名前 SamplePreferenceActivity
スーパークラス android.preference.PreferenceActivity
インターフェース (なし)

image

⇒ マニフェストファイルの修正

AndroidManifest.xml の編集

”PreferencesSample/AndroidManifest.xml”

image

⇒ メインアクティビティの変更

設定画面を開くためのボタンの追加

main.xml の編集

”PreferencesSample/res/layout/main.xml”

image

PreferencesSampleActivity.java の編集

”PreferencesSample/src/jp/andsys/android/preferencesample/PreferencesSampleActivity”

image

image

⇒ 実行

「設定画面を開く」をタップして設定画面を開く。

image

設定画面が開いたら「タイトル」をクリックする。

image

「タイトル入力ダイアログ」が開いたら適当な文字を入力し「OK」ボタンを押す。

image

「色」をクリックする。

image

「色選択」ダイアログが開いたら、適当な色をクリックする。

「設定項目の入れ子」にもチェックし、戻るボタンで全画面に戻る。

「取得」ボタンを押すと、タイトルと色に値が入ることが確認できる。

image

以上で「共有プリファレンス」を終了します。

 

本記事は以下の参考書を元にしています。


Androidプログラミングの基礎[4] サービス [Android]

今回のテーマは「サービス」です。

第4回: サービスによる常駐アプリケーション

サービスとは時間のかかるような処理を行うための仕組み。

1.サービスとは

サービスを使うと、ユーザーが異なるアプリケーションを実行していてもバックグラウンドで作業を行うことができる。いわゆる「常駐型プログラム」を作成できる。

◎ サービスの作成方法

サービスは、Serviceクラス(android.app.Service)を継承して、次のようなコールバックメソッドを必要に応じてオーバーライドしながら処理を記述する。

Serviceクラスの主なメソッド

メソッド 解説
void onCreate サービスが最初に生成されたときに呼ばれる
int onStartCommand startServiceメソッドによるサービス開始要求を受けたときに呼ばれる
IBinder onBind bindServiceメソッドによるサービス開始要求を受けたときに呼ばれる
void onRebind すべての接続が解除された後に、新しいクライアントからサービス開始要求を受けたときに呼ばれる
boolean onUnbind すべてのクライアントがサービスから接続を解除したときに呼ばれる
void onDestroy サービスが破棄されるときに呼ばれる

◎ IntentServiceクラスによるサービスの作成方法

IntentServiceクラス(android.app.IntentSefrvice)は、煩雑な別スレッド作成処理を行ってくれるサービス用のクラス。

IntentServiceクラスには、void onCreate, int onStartCommand, IBind onBind, void onDestrohy, void onHandleIntent メソッド等がある。

複雑なスレッドを生成する場合、またサービスとの双方向通信を必要としない場合には、このクラスを継承してサービスを作ればよい。

◎ サービスの開始方法

⇒ startServiceを使ったサービス

アクティビティによって開始されるサービス。サービスが開始されると、stopSelfメソッドで自信を停止するか、アクティビティのstopServiceメソッドが実行されるまで停止しない。

⇒ bindServiceを使ったサービス

アクティビティによってバインドされたサービス。

 

2.startServiceを使ったサービス

◎ サンプル作成

アクティビティからインテントで渡された秒数だけ処理を停止するだけの単純なサービス。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 ServiceExample
プロジェクト名 ServiceExample
パッケージ名 jp.andsys.android.serviceexample
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 ServiceExampleActivity
レイアウト名 main
ナビゲーション・タイプ None

⇒ サービスクラスの作成

IntentServiceクラスを継承したクラスを作成します。

設定項目 入力値 / 選択項目
パッケージ jp.andsys.android.serviceexample
名前 SampleService
スーパークラス android.app.IntentService
インターフェイス (なし)

SampleService.java の編集

”ServiceExample/src/jp/andsys/android/serviceexample/SampleService.java”

image

⇒ マニフェストファイルの修正

AndroidManifest.xml の編集

”ServiceExample/AndroidManifest.xml”

image

⇒ レイアウトとアクティビティの作成

main.xml の編集

”ServiceExample/res/layout/main.xml”

image

ServiceExampleActivity.java の編集

”ServiceExample/src/jp/andsys/android/serviceexample/ServiceExampleActivity.java”

image

⇒ 実行

「インテントでサービスを開始」ボタンを押します。

image

サービスが開始されました。

image

5秒後にサービスが終了しました。

image

 

3.bindServiceを使ったサービス

後からサービスに対する操作を行うことが容易で、アクティビティをサービスを紐付け(バインド)することで、データのやり取りが可能となる。

◎ HandlerとMessenger

サービスとの通信を行うために、MessengerクラスとHandlerクラスを使う。

⇒ Handlerクラス

メッセージの遅延処理をしたり、別スレッドへ処理を依頼したりします。

⇒ Messengerクラス

メッセージを送信するために使用するHandlerへの参照です。

⇒ Messageクラス

Handlerに送信することのできる任意のデータと、その伝達事項を含んだメッセージを定義する。

◎ サービスへのバインド

サービスに接続して通信を行う場合は、サービスの状態を監視するためのServiceConnectionインターフェースを利用する。

◎ サンプル作成

アクティビティからサービスへバインドするサンプルです。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 BindServiceExample
プロジェクト名 BindServiceExample
パッケージ名 jp.andsys.android.bindserviceexample
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 BindServiceExampleActivity
レイアウト名 main
ナビゲーション・タイプ None

⇒ サービスクラスの作成

Serviceクラスを継承したクラスを作成します。

設定項目 入力値 / 選択項目
パッケージ jp.andsys.android.bindserviceexample
名前 BindService
スーパークラス android.app.Service
インターフェイス (なし)

BindService.java の編集

”ServiceExample/src/jp/andsys/android/bindserviceexample/BindService.java”

image

⇒ マニフェストファイルの修正

AndroidManifest.xml の編集

”BindServiceExample/AndroidManifest.xml”

image

⇒ レイアウトとアクティビティの作成

main.xml の編集

”BindServiceExample/res/layout/main.xml”

image

BindServiceExampleActivity.java の編集

”BindServiceExample/src/jp/andsys/android/bindserviceexample/BindServiceExampleActivity.java”

image

image

⇒ ServiceConnectionの実装

onServiceConnected メソッド

機能 サービスとの接続が完了したときに呼ばれるコールバックメソッド
書式 void onServiceConnected(ComponentName name, IBinder service)
引数 name : サービスクラスの識別子が渡される
service : サービスから受け取ったIBinderオブジェクトが渡される

onServiceDisconnected メソッド

機能 サービスとの接続が予期せず切断されたときに呼ばれるコールバックメソッド
書式 void onServiceDisconnected(ComponentName name)
引数 name : 切断されたサービスクラスの識別子が渡される

⇒ サービスへのバインド

サービスを起動するには、ServiceConnectionの実装を引数にしてbindServiceを呼び出す。

bindService メソッド

機能 サービスを開始する
書式 boolean bindService(Intent service, ServiceConnection conn, int flags)
引数 service : 開始するサービスのインテント
conn : 接続に使用するServiceConnectionオブジェクト
flags : バインドのオプション

◎ サービスへメッセージを送信する

メッセージオブジェクトを作成する場合には、コンストラクタからではなくobtainめどっどを使う。

obtain メソッド

機能 Messageオブジェクトを作成する
書式 Message obtain(Handler h, int what, int arg1, int arg2, Object obj)
引数 h : Messageオブジェクトを送信するHandlerオブジェクト
what : 受信側がメッセージを識別するためのユーザー定義のコードを指定
arg1, arg2 : 追加のメッセージ
obj : サービスへ渡す任意のオブジェクト

メッセージの送信はMessangerのsendメソッドを使用する。

send メソッド

機能 このMessangerが指すHandlerへメッセージを送信する
書式 void send(Message message)
引数 message : 送信するメッセージ

⇒ サービスからのアンバインド

サービスからアンバインドするにはunbindServiceメソッドを呼びます。

unbindService メソッド

機能 サービスをアンバインドする
書式 void unbindService(ServiceConnection conn)
引数 conn : 切り離すサービスのServiceConnectionオブジェクト

⇒ 実行

起動画面から「サービスにバインドする」ボタンを押すとバインドされました。

image

「サービスにメッセージを渡す(Android)」ボタンを押すと、メッセージが送信され「Hello Android!」と表示されます。

image

「サービスにメッセージを渡す(アンドロイド)」ボタンを押すと、「Hello! アンドロイド!」と表示されます。

image

「サービスからアンバインドする」ボタンを押してからはメッセージは表示されなくなります。

 

4.双方向メッセージに対応する

アクティビティからサービスにメッセージを送った後に応答を返すようにする。

◎ サンプル作成

BindServiceExampleをサービスとアクティビティの双方向通信に対応させる。

BindServiceExampleActivity.java の編集

”BindServiceExample/src/jp/andsys/android/bindserviceexample/BindServiceExampleActivity.java”

image

image

image

⇒ サービスクラスの変更

BindService.java の編集

”BindServiceExample/src/jp/andsys/android/bindserviceexample/BindService.java”

image

⇒ 実行

実装方法が変わっただけで、アプリケーションの動作は見た目かわりなく動作します。

 

5.サービスとライフサイクル

サービスのライフサイクルコールバックメソッド

メソッド 解説
void onCreate サービス生成時
int onStartCommand startServiceメソッドによるサービス開始時
IBinder onBind bindServiceメソッドによるサービス開始時
void on Rebind 再バインド時
boolean onUnbind バインド解除時
void onDestroy サービス破棄時

以上で「サービス」を終了します。

 

本記事は以下の参考書を元にしています。


Androidプログラミングの基礎[3] 暗黙インテント [Android]

今回のテーマは「暗黙インテント」です。

第3回: 暗黙インテント

Androidの特徴の一つとしてアプリケーション間の連携がある。共有機能により他のアプリケーションを起動しデータを連携することが出来る。

暗黙インテントとはAndroidのアプリケーション間連携機能であり、相手のアプリケーション名を知らなくても、システムが最適な相手に渡してくれる。

1.暗黙インテントとインテントフィルター

例として、カメラアプリで写真を撮ったデータをメールソフトに送ったり、Facebookに連携して画像をアップロードしたりできる。

◎ インテントフィルター

Androidシステムは、AndroidManifest.xmlでアプリケーションにintent-filter要素で設定したインテントフィルターに基づいて、インテントの宛先を処理している。

インテントの調査は、インテントの保持するアクション、カテゴリー、データ3つの項目に対して行われる。

⇒ アクション

action要素でアクションを指定する。例えば「通話する」、「データを編集する」、「メッセージを配信する」などの内容を定義しておく。

⇒ カテゴリー

category要素でカテゴリーを指定する。カテゴリーはアクションに対する追加情報を表す。

⇒ データ

data要素でデータを指定します。取扱いに関する情報を、URIとMIMEタイプで指定する。例えば電話を掛けるURIは「tel:0123456789」、地図を示すURIは「geo:35.69,139.69」となる。

 

2.2つのアプリケーションの連携

インテントを送信するアプリケーションと受信するアプリケーションの2つを作成する。

◎ インテント受信アプリケーションの作成

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 AnimalView
プロジェクト名 AnimalView
パッケージ名 jp.andsys.android.animalview
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 AnimalViewActivity
レイアウト名 main
ナビゲーション・タイプ None

・プロジェクトの生成

image

アプリで使用する画像ファイルを以下にコピーします。

image

⇒ アクティビティの作成

・レイアウトXML作成

”AnimalView/res/layout/giraffe.xml”

Eclipseのメニューから「ファイル」、「新規」、「その他」を実行し、「Android」、「Android XML ファイルを」選択し、以下の設定でレイアウトXMLを作成します。

設定項目 入力値/選択項目
リソース・タイプ Layout
プロジェクト AnimalView
ファイル giraffe
ルート要素 LinearLayout

作成された、giraffe.xml ファイルを編集します。

image

・Giraffeアクティビティの作成

”AnimalView/src/jp/andsys/android/animalview/Giraffe.java”

Eclipseのメニューから「ファイル」、「新規」、「クラス」を選択し、「新規Javaクラス」画面から以下の設定でクラスを作る。

設定項目 入力値/選択項目
パッケージ jp.andsys.android.animalview
名前 Giraffe
スーパークラス android.app.Activity
インターフェース なし

作成された、Giraffe.java ファイルを編集します。

image

同様に、ライオンとカバを作成します。

ライオン用ソース

lion.xml

image

Lion.java

image

カバ用ソース

hippo.xml

image

Hippo.java

image

⇒ マニフェストの修正

アクティビティをAndroidManifest.xmlに追加し、インテントフィルターの設定を行う。

AndroidManifest.xml の編集

”AnimalView/AndroidManifest.xml”

image

image

◎ インテント送信アプリケーションの作成

  インテント送信側のアプリケーションを作成します。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 ImplicitIntent
プロジェクト名 ImplicitIntent
パッケージ名 jp.andsys.android.ImplicitIntent
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 ImplicitIntentActivity
レイアウト名 main
ナビゲーション・タイプ None

・プロジェクトの生成

image

main.xml の編集

”ImplicitIntent/res/layout/main.xml”

image

ImplicitIntentActivity.java の編集

”ImplicitIntent/src/jp/andsys/android/implicitintent/ImplicitIntentActivity.java”

image

⇒ 実行時の注意

AnimalViewアプリケーションを一度実行しておきます。次にImplicitIntentアプリを起動します。

image

「キリン」ボタンを押します。

image

戻るボタンを押します。

image

「すべて」ボタンを押すとリスト画面が現れるので、「ライオン」をクリックします。

image

ライオン画面がでます。

image

 

3.標準アプリケーションを起動する

Android標準のアプリケーションを起動するアプリケーションを作成します。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 ImplicitIntent2
プロジェクト名 ImplicitIntent2
パッケージ名 jp.andsys.android.ImplicitIntent2
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 ImplicitIntent2Activity
レイアウト名 main
ナビゲーション・タイプ None

・プロジェクトの生成

image

main.xml の編集

”ImplicitIntent/res/layout/main.xml”

image

ImplicitIntent2Activity.java の編集

”ImplicitIntent2/src/jp/andsys/android/implicitintent2/ImplicitIntent2Activity.java”

image

AndroidManifest.xml の編集

”AnimalView/AndroidManifest.xml”

image

・実行

image

◎ Web検索

Webブラウザーを起動する場合は、ACTION_WEB_SEARCHアクションを使ってIntentオブジェクトを作成します。

// Web検索
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "アンドロイド");

URLを渡して表示する場合は次のようにします。

Uri uri = Uri.parse(“http://developer.android.com/”);

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

image

◎ 電話をかける

電話を掛ける場合は、ACTION_CALLアクションを使います。

// 電話をかける
Intent intent = new Intent(Intent.ACTION_CALL,
        Uri.parse("tel:01234567890"));

image

◎ マップを起動

マップアプリの起動は、ACTION_VIEWアクションを使います。

// 地図を起動
Intent intent = new Intent(Intent.ACTION_VIEW,
        Uri.parse("geo:35.689, 139.691?z=16"));

マップアプリが無いためクラッシュ!

◎ オーディオを取得

オーディオアプリの起動は、ACTION_GET_CONTENTアクションを使い、setTypeメソッドでデータのMIMEタイプを指定します。

// オーディオを取得
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*");

image

image

◎ イメージを取得

イメージの場合以下のようにします。

// イメージを取得
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");

image

 

4.他のアプリケーションを起動する

明示インテントにおけるインテントフィルターの扱いを説明するため、サンプルプログラム”IntentSample1”を起動するアプリケーションを作成する。

プロジェクト設定

・新規Androidアプリケーション

アプリケーション名 AppStart
プロジェクト名 AppStart
パッケージ名 jp.andsys.android.appstart
最小必須 SDK API 8: Android 2.2 (Froyo)
ターゲット SDK API 18
次でコンパイル API 10: Android 2.3.3 (Gingerbread)
テーマ None

・プロジェクトの構成

ディフォルトのまま

・アイコンの属性

ディフォルトのまま

・アクティビティーの作成

Blank Activity

・Blank Activity

アクティビティ名 AppStartActivity
レイアウト名 main
ナビゲーション・タイプ None

・プロジェクトの生成

image

main.xml の編集

”AppStart/res/layout/main.xml”

image

AppStartActivity.java の編集

”AppStart/src/jp/andsys/android/appstart/AppStartActivity.java”

image

・実行

image

「IntentSample1 ActivityA起動」ボタンを押す。するとアプリケーションが起動します。

image

「IntentSample1 ActivityB起動(エラー)」ボタンを押す。するとエアーでアプリケーションがクラッシュしました。

image

IntentSample1 のAndroidManifest.xmlのActivityB のactivity要素に、以下のIntent-filter要素を設定すれば起動する。

image

”IntentSample1”アプリケーション修正後、「IntentSample1 ActivityB起動(エラー)」ボタンを押す。すると画面Bが起動しました。

image

以上で「暗黙インテント」を終了します。

 

本記事は以下の参考書を元にしています。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。