Android携帯ゲームを作って世界に配信してみよう(3) ―― 効果音の入れ方とデータの保存処理を学ぶ

山田 元康

tag: 組み込み

エレキ系DIY 2011年12月 7日

4.データを読み込み・保存しよう!

 今回のゲームでは,ハイスコアを達成したときはそのスコアと日時を保存し,アプリを再起動した場合に,以前保存したスコアと日時をファイルから読み込み,タイトル画面に表示させています.

 ハイスコアの読み込み・保存を実装するには,「内部ストレージ」という機能を利用します.Androidでは内部ストレージ以外にも,外部ストレージ,キーバリュー管理,簡易データベースなどのデータ管理機能が用意されています.詳しくは,下記のGoogle社の資料を参照してください.

Data Strage | Android Developers
http://developer.android.com/intl/ja/guide/topics/data/data-storage.html

 

 では,まず内部ストレージに存在するデータ・ファイルを読み込む方法を説明します.

(1)ファイル読み込み管理クラスの生成   FileInputStream fis = context.openFileInput(fileName);

(2)データの読み込みとバッファへの格納  fis.read(buffer,offset,length);

(3)読み込み終了             fis.close();

 (1)で,ファイル読み込み管理クラスFileInputStreamを生成して,指定したファイル名(fileName)のファイルの読み込みを開始します.続いて(2)で,指定した長さ(length)のデータを読み込み,指定したバッファ(buffer)の指定した開始位置(offset)に格納します.なお,バッファはあらかじめ,offset+length以上の長さのバイト型の配列を確保してください.そして,すべての読み込みが完了したら,(3)のように終了処理を行います.

 次に,新規にファイルを生成して,データを書き込む流れをご紹介します.

(1)ファイル書き込み管理クラスの生成   FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);

(2)データの書き込み           fos.write(buffer,start,length);

(3)書き込み終了             fos.close();

 (1)で,データを書き込むファイル名(fileName)とファイルのアクセス権限(例では,Context.MODE_PRIVATE)を指定して,ファイル書き込み管理クラスFileOutputStreamを生成します.もしファイルが存在していない場合は,ここでファイルを新規に生成します.(2)では,指定したバッファ(buffer)の指定した開始位置(start)から,指定した長さ(kength)のデータをファイルに書き込みます.すべての書き込みが終わったら,忘れずに,(3)のように終了処理を行います.

 さらに,ファイルの読み書きで一番重要なContextクラスのopenFileInputメソッドと,openFileOutputメソッドについて詳しく説明します.なお,FileInputStreamクラスとFileOutputStreamクラスはJava標準のクラスなので,ここでは説明を省略します.詳しくはJavaのAPIドキュメント(http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/)を参照してください.

 

●ファイルを読み込む:ContextクラスのopenFileInputメソッド

public FileInputStream openFileInput (String name)

 このメソッドは,アプリケーション・パッケージに関連付けられたプライベートなファイルを読み込みのために開きます.ファイルが存在しない場合はFileNotFoundException例外が発生します.引き数と戻り値は表6のようになります.

 

表6 Contextクラス openFileInputメソッドの引き数と戻り値

引き数
name
ファイル名を指定する.パスやセパレータを含まずに,ファイル名(と拡張子)だけを指定すること
戻り値 ファイルを読み込み用に開くことが成功した場合は,指定したファイルの読み込みを管理するFileInputStreamクラスのインスタンスが返される


読み込まれるファイルは,Androidのファイル管理システム上の"/data/data/<アプリケーションのパッケージ名>/<指定したファイル名>"に存在するファイルです.今回のアプリでハイスコアを保存するファイル名は「playlog.dat」ですが,この場合は,/data/data/com.spicysoft.sample.dribble/playlog.datになります,


●ファイルに書き込む:ContextクラスのopenFileInputメソッド

public abstract FileOutputStream openFileOutput (String name, int mode)

 このメソッドは,アプリケーション・パッケージに関連付けられたプライベートなファイルを書き込みのために開きます.もしファイルが存在していない場合は,自動でファイルが生成されます.引き数と戻り値は表7のようになります.

 

表7 Contextクラス openFileInputメソッドの引き数と戻り値

name データを書き込みたいファイル名を指定する
mode 作成したファイルのアクセス権限を指定する.アクセス権限を指定するフラグは以下の4種類である.

Context.MODE_PRIVATE(デフォルト値):ファイルを生成したアプリケーションのみがアクセスできるプライベート・ファイルを生成する
Context.MODE_APPEND:既に存在しているファイルのデータを消去せずに,データの最後尾からデータを追記する
Context.MODE_WORLD_READABLE:他のアプリケーションが生成したファイルを読み込むことができる
Context.MODE_WORLD_WRITEABLE:他のアプリケーションが生成したファイルに書き込むことができる

戻り値 ファイルを書き込み用に開くことが成功した場合は,指定したファイルの書き込みを管理するFileOutputStream クラスのインスタンスが返される

 

 なお,アクセス権限を指定するフラグは,複数組み合わせることができます.例えば,MODE_APPENDは,MODE_PRIVATE | MODE_APPENDのように使うと,プライベート・ファイルを追記モードで生成します.また,他のアプリでも読み書き可能なファイルを生成する場合は,MODE_WORLD_READABLE | MODE_WORLD_WRITEABLEと指定します.

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日