SSブログ

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

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

 

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


WordPress Plugin [WP-PageNavi] [WordPress]

ページナビゲーションを設置するプラグイン

 

インストール

WordPress管理画面のプラグインから検索すると見つかります。そのまま「今すぐインストール」を選択し「有効化」すれば使うことが出来ます。

image

 

実行

ページナビゲーションを表示するには、テーマの中で表示させたい位置に以下のような記述を追加します。

<?php if ( function_exists( ‘wp_pagenavi’ ) ) {

wp_pagenavi();

} ?>

index.php の記事の表示部の最後にコードを追加してみました。

http://kazu-oyaji.com/wp/

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

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

 

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


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