Android エミュレータが、Waiting for Home で停止している [Android]
Androidアプリの開発対象を、Xperia acro から Xperia Z に変更するとともに、Android 仮想デバイス・マネージャーの設定を変更したらエミュレータが”Waiting for HOME ('android.process.acore') to be launched...”と表示したまま先に進まなくなった。原因調査と実施した内容を書いておく。
この画面のまま停止先に進まない。
主な原因としてVM ヒープとSDカードの値を大きくすれば良いとの情報が多くみかけられたので、それぞれ大きな値を設定したが改善しなかった。
さらに、プロジェクトのクリーンおよび仮想デバイスの再作成を行ったところ起動するようになった。
起動した。
以下にそれぞれの実施方法を記す。
仮想デバイス・マネージャーの設定
- VM ヒープを”64”から”525”へ
- SD カードを”0”から”4GiB”へ
- 「ホストGPUを使用する」にチェック。 ← 起動には関係ないが、明らかに起動が速くなった。
プロジェクトのクリーン方法
Eclipseのメニューから「プロジェクト」、「クリーン」と選択する。
仮想デバイスの再作成
仮想デバイス・マネージャーから対象のAVDを選択し「削除」ボタンをして削除、つぎに「新規」ボタンから新規作成をおこなう。
参考サイト(貴重な情報を、ありがとうございました。)
- http://nek-blog.blogspot.jp/2011/07/android-hello-world-app-2.html
- http://papanda2013.seesaa.net/article/298079503.html
- http://d.hatena.ne.jp/RC3/20101023/1287843279
Androidを開発者向けに設定する方法 [Android]
Android端末で独自のアプリケーションを動作させるには下記の設定が必要となります。
Andoroid 2.3 の場合
- 「USBデバッグ」有効 (「設定」、「アプリケーション」、「開発」の中)
- 「提供元不明のアプリのインストール」許可 (「設定」、「アプリケーション」の中)
Android 4.2 の場合
- 「USBデバッグ」有効
- 「設定」、「端末情報」と押します。「ビルド番号」を数回タップすると「デベロッパーになるまであと○ステップです。」と表示されます。この○が”0”になるまでタップを続けます。(全部で7回押す。)
- 「あなたは今開発者になりました」と表示されます。
- 「設定」の下に「{}開発者向けオプション」が表示されます。
- 「USBデバッグ」を有効にする。
- 「スリープモードにしない」有効(「{}開発者向けオプション」内)オンにしておくと充電中はスリープしなくなるのでテストやデバッグがやりやすくなります。
- 「提供元不明のアプリのインストール」許可 (「設定」、「セキュリティ」の中)
メモ
表示させた「{}開発者向けオプション」を非表示にする方法
- 「設定」、「アプリ」とタップする。
- 「すべて」タブを選択し、「設定」アプリをタップする。
- 「データを削除」ボタンを押せば、「{}開発者向けオプション」が消えます。
スマホの画面スクリーンショットは後から追加するかもしれません!
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”
MenuSampleActivity.java の編集
”MenuSample/src/jp/andsys/android/menusample/MenuSampleActivity”
⇒ オプションメニューの初期化
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」ボタンを押すとメヌーが表示されます。
また各項目を押すと押した項目がトーストにって表示されます。
2.コンテキストメニューを作る
コンテキストメニューは状況に応じて表示するメニューで、画面の長押しでポップアップされます。
◎ コンテキストメニュー関連のクラス・インターフェイス
コンテキストメニューの操作は、ContextMenuインターフェイス(android.view.ContextMenu)で行います。
⇒ コンテキストメニュー関連のイベント
ビューが長押しされると、以下のようなActivityクラスのコールバックメソッドが呼ばれる。
メソッド | 解説 |
void inCreateContextMenu | ビューが長押しされたときに呼ばれる |
boolean onContextMenuItemSelected | コンテキストメニューの項目がタップされたときに呼ばれる |
◎ サンプル
main.xml の編集
”MenuSample/res/layout/main.xml”
コンテキストメニュー用のレイアウトXMLを追加する。
Eclipseメニューから「ファイル」、「新規」、「その他」を実行し「Android」「AndroidXMLファイル」を選択する。
設定は以下の内容とする。
設定項目 | 入力値/選択項目 |
リソース・タイプ | Menu |
プロジェクト | MenuSample |
ファイル | context_menu |
ルート要素 | menu |
context_menu.xml の編集
”MenuSample/res/menu/context_menu.xml”
MenuSampleActivity.java の編集
”MenuSample/src/jp/andsys/android/menusample/MenuSampleActivity”
⇒ コンテキストメニューの作成
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 () |
引数 |
⇒ 実行
テキストボックスを長押しするとメニューが現れます。このメニューから文字列の操作(編集、文字列の選択等)を行います。
次に選択された文字列を長押しするとカット&ペーストメニューが現れます。
カット&ペーストした文字列は上部のラベルエリアに張り付けることも可能です。
3.ノーティフィケーション
ノーティフィケーションとは、システムのステータスバーを開いた領域にアイコンとメッセージで通知を行うインターフェースのこと。
◎ ノーティフィケーションに関連するクラス
表示手順
- Notificationクラスのインスタンスを生成
- ノーティフィケーションをタッチした時にアクティビティを起動するためのインテントを準備
- インテントを元に、PendingIntentクラスのインスタンスを生成
- ノーティフィケーションにPendingIntentをセット
- 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”
NotificationSampleActivity.java の編集
”NotificationSample/src/jp/andsys/android/notificationsample/NotificationSampleActivity”
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のインスタンス |
⇒ 実行
◎ その他の通知オプション
サウンド再生、バイブレーション、通知LEDランプ点灯、数値バッジの表示機能を追加する。
NotificationSampleActivity.java の編集
”NotificationSample/src/jp/andsys/android/notificationsample/NotificationSampleActivity”
Androidのデフォルト設定を使用する場合は、defaultフィールドを使用する。
⇒ 通知音
notification.defaults |= Notification.DEFAULT_SOUND;
⇒ バイブレーション
notification.defaults |= Notification.DEFAULT_VIBRATE;
⇒ 通知LED
notification.defaults |= Notification.DEFAULT_LIGHTS;
⇒ 数値アイコン表示
notification.number = 1;
実行
以上で「メニューとノーティフィケーション」を終了します。
本記事は以下の参考書を元にしています。
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”
ProgressActivity.java の編集
”Progress/src/jp/andsys/android/progress/ProgressActivity”
⇒ 円形のプログレスダイアログ
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 : 何ミリ秒後に送信するか |
⇒ 実行
「円形スタイル」
「水平スタイル」
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”
DatePickerActivity.java の編集
”DatePicker/src/jp/andsys/android/datepicker/DatePickerActivity”
onDateSet メソッド
機能 | 日付が指定されたら呼ばれるコールバックメソッド |
書式 | void onDateSet ( DatePicker view, int year, int monthOfYear, int dayOfMonth ) |
引数 | view : DatePickerDialogで使われているDatePickerビュー year : 設定された年 monthOfYear : 設定された月 dayOfMonth : 設定された日 |
⇒ 実行
「日付」テキストボックスをクリックすると現れ、「Set」ボタン入力で日付が入力される。
◎ 時刻ピッカーダイアログ
時刻ピッカーダイアログは、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”
TimePickerActivity.java の編集
”TimePicker/src/jp/andsys/android/timepicker/TimePickerActivity”
onTimeSet メソッド
機能 | 時刻が指定されたら呼ばれるコールバックメソッド |
書式 | void onTimeSet ( TimePicker view, int hourOfDay, int minute ) |
引数 | view : TimePickerDialogで使われているTimePickerビュー hourOfDay: 設定された「時」 minute : 設定された「分」 |
⇒ 実行
「時間」テキストボックスをクリックすると現れ、「Set」ボタン入力で時間が入力される。
以上で「ダイアログを使いこなす」後編を終了します。
本記事は以下の参考書を元にしています。
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”
DialogActivity.java の編集
”DialogActivity/src/jp/andsys/android/dialog/DialogActivity”
setTitle メソッド
機能 | ダイアログに表示するタイトルを設定 |
書式 | AlartDialog.Builder setTitle ( CharSequence title ) |
引数 | title : タイトルに表示する文字列 |
setMessage メソッド
機能 | ダイアログに表示するメッセージを設定 |
書式 | AlartDialog.Builder setMessage ( CharSequence message) |
引数 | message : メッセージに表示する文字列 |
⇒ 実行
「ダイアログ」表示ボタンを押すとアラートダイアログが現れる。
2.アクティビティへのダイアログ実装
Activityクラスの持つコールバックメソッドによりダイアログの状態を監視させる。これにより意図しない場面(例えば画面の回転時に消える)でダイアログが消滅することを防ぐことができる。
◎ サンプル
DialogActivity.java の編集
”DialogActivity/src/jp/andsys/android/dialog/DialogActivity”
⇒ 実行
画面回転後もダイアログが表示されている。
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”
AlertDialogSamplesActivity.java の編集
”AlertDialogSamplesActivity/src/jp/andsys/android/alertdialogsamples/AlertDialogSamplesActivity”
実行します。
⇒ ボタンのあるダイアログ
⇒ リストダイアログ
⇒ ラジオボタンダイアログ
⇒ チェックボックスダイアログ
⇒ カスタムダイアログ
今回のテーマ「ダイアログを使いこなす」前篇を終了します。
本記事は以下の参考書を元にしています。
Android エミュレータ画面回転しない [Android]
Androidアプリケーション開発で使用するAndroidエミュレータの画面回転は”ctrl + F11”で行うことが出来る。しかしエミュレータは横を向くが画面は回転しない。この問題についての対応方法を調査した。
Web上に「Android 仮想デバイス・マネージャー」でハードウエアのキーボードオプションを変更すことで対応可能とあったので実施した。
① AVDの起動
Eclipseのメニューから「Android 仮想デバイス・マネージャー」を起動する。
② 編集
「Android Virtual Devices」タブの対象となるAVDを選択し「編集」ボタンを押す。
③ プロパティの変更
「キーボード: ハードウェア・キーボードあり」にチェックを入れ「OK」ボタンを押す。
”ctrl + F11”でエミュレータを横にする。画面も追従するようになりました。
以上
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”
InternalIOActivity.java の編集
”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”
⇒ ファイルへの書き込み
fos = openFileOutput(FILENAME, MODE_PRIVATE);
fos.write(memoText.getText().toString().getBytes());
⇒ ファイルからの読み込み
fis = openFileInput(FILENAME);
byte[] readBytes = new byte[fis.available()];
⇒ 実行
テキストボックスに文字を入力し「SAVE」ボタンを押します。
確認
① DDMSパースペクティブを開く
Eclipseメニューから「ウインドウ」、「パースペクティブを開く」、「その他」を実行し、「DDMS」を選択し「OK」ボタンを押す。
② エミュレータの選択
「デバイス」タブでデバッグ対象のエミュレータまたは端末を選択します。次に右側の「ファイル・エクスプローラ」を選択し”data/data/jp.andsys/android/internalio/files”ホルダーを開き、memo.txtファイルがあることを確認します。
③ ファイルのダウンロード
memo.txtを選択し、「端末からファイルを取得」ボタンを押します。
④ ファイルを開いて内容を確認する。
2.他のアプリケーションのファイルへのアクセス
◎ サンプル
InternalIOで作成したファイルを読み込むアプリケーションを作成する。
InternalIOで書き込んだファイルを、他のファイルから読み込めるように権限を変更する。
InternalIOActivity.java の編集
”InternalIO/src/jp/andsys/android/internalio/InternalIOActivity”
プロジェクト設定
・新規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”
OtheAppIO.java の編集
”OtheAppIO/src/jp/andsys/android/othrappio/OtheAppIOActivity”
createPackageContext メソッド
機能 | パッケージ名を指定してコンテキストを生成する |
書式 | Context createPackageContext ( String packageName name, int flags ) |
引数 | PackageName : パッケージ名 flags : セキュリティのためのフラグ CONTEXT_INCLUDE_MODE : 生成するコンテキストに対するセキュリティを有効にする CONTEXT_IGNORE_MODE : 生成するコンテキストに対するセキュリティをすべて無視する |
⇒ 実行
ファイルを読み込んで表示できました。
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”
パーミッションを記述
main.xml の編集
”ExternalIO/res/layout/main.xml”
OtheAppIO.java の編集
”ExternalIO/src/jp/andsys/android/externalio/ExternalIOActivity”
⇒ 外部ストレージのチェック
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」した
ファイルは以下にできた。
ファイルをテキストエディタで開いた。
以上で「ストレージへのファイル入出力」を終了します。
本記事は以下の参考書を元にしています。
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”
preferences_sample.xml の編集
”PreferencesSample/res/menu/preferences_sample.xml”
main.xml の編集
”PreferencesSample/res/layout/main.xml”
PreferencesSampleActivity.java の編集
”PreferencesSample/src/jp/andsys/android/preferencesample/PreferencesSampleActivity”
⇒ 共有プリファレンスの作成
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、リストを青にし「保存」ボタンを押す。
チェックボックスOFF、リストを緑にして「取得」ボタンを押す。
保存された値を読み込んで表示された。
2.デフォルトの共有プリファレンスを使う
アプリケーションにはデフォルトの共有プリファレンスが1つ用意されている。これの使い方について調査した、
◎ サンプルの修正
PreferencesSampleActivity.java の編集
”PreferencesSample/src/jp/andsys/android/preferencesample/PreferencesSampleActivity”
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”
⇒ 設定画面の作成
sample_preference.xml の作成 および 編集
”PreferencesSample/res/xml/sample_preference.xml”
Eclipseのメニューから「ファイル」、「新規」、「その他」と実行し、「Android」、「AndroidXMLファイル」を選択します。
設定項目 | 入力値/選択項目 |
リソース・タイプ | Preference |
プロジェクト | PreferencesSample |
ファイル | sample_preference |
ルート要素 | PreferenceScreen |
⇒ 設定画面用アクティビティの作成
Eclipseのメニューから「ファイル」、「新規」、「クラス」と実行し以下の内容でクラスを作成する。
SamplePreferenceActivity.java の作成 および 編集
”PreferencesSample/src/jp/andsys/android/preferencesample/SamplePreferenceActivity.java”
設定項目 | 入力値/選択項目 |
パッケージ | jp.andsys.android.preferencessample |
名前 | SamplePreferenceActivity |
スーパークラス | android.preference.PreferenceActivity |
インターフェース | (なし) |
⇒ マニフェストファイルの修正
AndroidManifest.xml の編集
”PreferencesSample/AndroidManifest.xml”
⇒ メインアクティビティの変更
設定画面を開くためのボタンの追加
main.xml の編集
”PreferencesSample/res/layout/main.xml”
PreferencesSampleActivity.java の編集
”PreferencesSample/src/jp/andsys/android/preferencesample/PreferencesSampleActivity”
⇒ 実行
「設定画面を開く」をタップして設定画面を開く。
設定画面が開いたら「タイトル」をクリックする。
「タイトル入力ダイアログ」が開いたら適当な文字を入力し「OK」ボタンを押す。
「色」をクリックする。
「色選択」ダイアログが開いたら、適当な色をクリックする。
「設定項目の入れ子」にもチェックし、戻るボタンで全画面に戻る。
「取得」ボタンを押すと、タイトルと色に値が入ることが確認できる。
以上で「共有プリファレンス」を終了します。
本記事は以下の参考書を元にしています。
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”
⇒ マニフェストファイルの修正
AndroidManifest.xml の編集
”ServiceExample/AndroidManifest.xml”
⇒ レイアウトとアクティビティの作成
main.xml の編集
”ServiceExample/res/layout/main.xml”
ServiceExampleActivity.java の編集
”ServiceExample/src/jp/andsys/android/serviceexample/ServiceExampleActivity.java”
⇒ 実行
「インテントでサービスを開始」ボタンを押します。
サービスが開始されました。
5秒後にサービスが終了しました。
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”
⇒ マニフェストファイルの修正
AndroidManifest.xml の編集
”BindServiceExample/AndroidManifest.xml”
⇒ レイアウトとアクティビティの作成
main.xml の編集
”BindServiceExample/res/layout/main.xml”
BindServiceExampleActivity.java の編集
”BindServiceExample/src/jp/andsys/android/bindserviceexample/BindServiceExampleActivity.java”
⇒ 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オブジェクト |
⇒ 実行
起動画面から「サービスにバインドする」ボタンを押すとバインドされました。
「サービスにメッセージを渡す(Android)」ボタンを押すと、メッセージが送信され「Hello Android!」と表示されます。
「サービスにメッセージを渡す(アンドロイド)」ボタンを押すと、「Hello! アンドロイド!」と表示されます。
「サービスからアンバインドする」ボタンを押してからはメッセージは表示されなくなります。
4.双方向メッセージに対応する
アクティビティからサービスにメッセージを送った後に応答を返すようにする。
◎ サンプル作成
BindServiceExampleをサービスとアクティビティの双方向通信に対応させる。
BindServiceExampleActivity.java の編集
”BindServiceExample/src/jp/andsys/android/bindserviceexample/BindServiceExampleActivity.java”
⇒ サービスクラスの変更
BindService.java の編集
”BindServiceExample/src/jp/andsys/android/bindserviceexample/BindService.java”
⇒ 実行
実装方法が変わっただけで、アプリケーションの動作は見た目かわりなく動作します。
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 |
・プロジェクトの生成
アプリで使用する画像ファイルを以下にコピーします。
⇒ アクティビティの作成
・レイアウトXML作成
”AnimalView/res/layout/giraffe.xml”
Eclipseのメニューから「ファイル」、「新規」、「その他」を実行し、「Android」、「Android XML ファイルを」選択し、以下の設定でレイアウトXMLを作成します。
設定項目 | 入力値/選択項目 |
リソース・タイプ | Layout |
プロジェクト | AnimalView |
ファイル | giraffe |
ルート要素 | LinearLayout |
作成された、giraffe.xml ファイルを編集します。
・Giraffeアクティビティの作成
”AnimalView/src/jp/andsys/android/animalview/Giraffe.java”
Eclipseのメニューから「ファイル」、「新規」、「クラス」を選択し、「新規Javaクラス」画面から以下の設定でクラスを作る。
設定項目 | 入力値/選択項目 |
パッケージ | jp.andsys.android.animalview |
名前 | Giraffe |
スーパークラス | android.app.Activity |
インターフェース | なし |
作成された、Giraffe.java ファイルを編集します。
同様に、ライオンとカバを作成します。
ライオン用ソース
lion.xml
Lion.java
カバ用ソース
hippo.xml
Hippo.java
⇒ マニフェストの修正
アクティビティをAndroidManifest.xmlに追加し、インテントフィルターの設定を行う。
AndroidManifest.xml の編集
”AnimalView/AndroidManifest.xml”
◎ インテント送信アプリケーションの作成
インテント送信側のアプリケーションを作成します。
プロジェクト設定
・新規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 |
・プロジェクトの生成
main.xml の編集
”ImplicitIntent/res/layout/main.xml”
ImplicitIntentActivity.java の編集
”ImplicitIntent/src/jp/andsys/android/implicitintent/ImplicitIntentActivity.java”
⇒ 実行時の注意
AnimalViewアプリケーションを一度実行しておきます。次にImplicitIntentアプリを起動します。
「キリン」ボタンを押します。
戻るボタンを押します。
「すべて」ボタンを押すとリスト画面が現れるので、「ライオン」をクリックします。
ライオン画面がでます。
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 |
・プロジェクトの生成
main.xml の編集
”ImplicitIntent/res/layout/main.xml”
ImplicitIntent2Activity.java の編集
”ImplicitIntent2/src/jp/andsys/android/implicitintent2/ImplicitIntent2Activity.java”
AndroidManifest.xml の編集
”AnimalView/AndroidManifest.xml”
・実行
◎ 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);
◎ 電話をかける
電話を掛ける場合は、ACTION_CALLアクションを使います。
// 電話をかける
Intent intent = new Intent(Intent.ACTION_CALL,
Uri.parse("tel:01234567890"));
◎ マップを起動
マップアプリの起動は、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/*");
◎ イメージを取得
イメージの場合以下のようにします。
// イメージを取得
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("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 |
・プロジェクトの生成
main.xml の編集
”AppStart/res/layout/main.xml”
AppStartActivity.java の編集
”AppStart/src/jp/andsys/android/appstart/AppStartActivity.java”
・実行
「IntentSample1 ActivityA起動」ボタンを押す。するとアプリケーションが起動します。
「IntentSample1 ActivityB起動(エラー)」ボタンを押す。するとエアーでアプリケーションがクラッシュしました。
IntentSample1 のAndroidManifest.xmlのActivityB のactivity要素に、以下のIntent-filter要素を設定すれば起動する。
”IntentSample1”アプリケーション修正後、「IntentSample1 ActivityB起動(エラー)」ボタンを押す。すると画面Bが起動しました。
以上で「暗黙インテント」を終了します。
本記事は以下の参考書を元にしています。