素人のアンドロイドアプリ開発日記

ファイル操作のコンテンツ

画像をスライドショーとして表示する。SDカードの認識

2011.03.29

ゼロからのAndroidアプリケーション開発入門

を参考に改良したものを作成させていただいております。

 

画像をスライドショーとして表示を行う。

ここで使用する画像に関しては、SDcardの中に含まれている写真を利用する。

ただし、ここでひとつ問題があって、SDcard内にある写真はアプリ毎のフォルダにあったり、ダウンロード用のフォルダ存在する場合がある。今回は全てのフォルダを検索してjpgファイルを探し出す方法でスライドショーを作成する。

最初に権限に関してですが、画像の書き込みは権限を取得する必要があるが、読み込みに関しては、権限を取得する必要はない。

まずが、SDCARDがあるかどうかに関してのファンクションを実行する。

private boolean sdcardReadReady(){
    	String state = Environment.getExternalStorageState();
    	return (Environment.MEDIA_MOUNTED.equals(state)||Environment.MEDIA_MOUNTED_READ_ONLY.equals(state));
}

上記のEnvironment.getExternalStorageState()が現在のSDCARDの状態です。

Environment.MEDIA_MOUNTED//読み書きが可能
Environmnet.MEDIA_MOUNTED_READ_ONLY//読み込みが可能である。

上記のファンクションsdcardReadReadyを用いてtrueを返せば、SDcardを使用でき、falseの場合には、SDcardが存在しない又は、使用できない。

ここで、SDCardが内場合にはアラート画面を出して、そのまま強制終了を行う事が可能である。

if(!sdcardReadReady()){
        new AlertDialog.Builder(this)
        .setMessage("SDCARDを認識できません。")
        .setNeutralButton("OK", new DialogInterface.OnClickListener(){
        	public void onClick(DialogInterface dialog, int which) {
        		dialog.dismiss();
        		finish();
        	}
        })
        .show();
        return;
}

上記ではクリックをした際には、アラートの画面を閉じて、ページも閉じるファンクションを追加している。

これで、SDCardの認識を行う事ができた。

続く。。

カテゴリー:ファイル操作

メモ帳を作成する

2011.03.24

今回はメモ帳を作成してみたいと思います。

機能としては、保存と破棄のみの簡単な機能のみのメモ帳を作ります。

 

最初にレイアウトですが、テキストフィールドと、ボタンを2つ、そしてstring.xmlの中に変数を用意しておきます。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
 <EditText 
 android:id="@+id/editText1" 
 android:text="EditText" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"></EditText>
 <Button 
 android:text="@string/save" 
 android:id="@+id/button1" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"></Button>
 <Button 
 android:text="@string/delete" 
 android:id="@+id/button2" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"></Button>
</LinearLayout>

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string name="hello">Hello World, MemoFile!</string>
 <string name="app_name">memo</string>
 <string name="file_name">memofiles</string>
 <string name="save">保存</string>
 <string name="delete">破棄</string>
</resources>

以上で設定をしてインストールをすると以下のようになります。

メモ帳

 

また、activityのファイルは下記のように記載をします。

package in.andante.memo;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MemoFile extends Activity implements OnClickListener {
 /** Called when the activity is first created. */
 EditText editText1;
 Button button1,button2;
 String fileName;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 editText1 = (EditText)findViewById(R.id.editText1);
 button1 = (Button)findViewById(R.id.button1);
 button2 = (Button)findViewById(R.id.button2);
 button1.setOnClickListener(this);
 button2.setOnClickListener(this);
 fileName = getResources().getString(R.string.file_name);
 try{
 FileInputStream fis = openFileInput(fileName);
 byte[] readBytes = new byte[fis.available()];
 fis.read(readBytes);
 editText1.setText(new String(readBytes));
 fis.close();
 }catch(Exception e){}
 }

 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 if(v == button1){
 //保存
 try{
 FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
 fos.write(editText1.getText().toString().getBytes());
 fos.close();
 }catch(Exception e){};
 
 }else if(v == button2){
 //破棄
 editText1.setText("");
 deleteFile(fileName);
 };
 }
}

 

今回に関しては、file名を固定にする事で常に、同じファイルを扱う事ができます。

今回使っている仕様

最初は、findViewByIdでmain.xmlで配置しているファイルをスクリプト内に反映します。またFileInputStreamで最初にread(読み込み)を行っております。一番最初、またはファイルを破棄した状態ではファイルは存在しないので、catchでエラーの場合わけを行います。ファイルを保存する時にはFileOutputStreamを用いて、画像画像を保存しています。この時ファイルの容量はテキストの容量と同義なので、テキストの容量をバッファーのサイズにあてる事ができます。またファイルの破棄の際にはdeleteFile()のみで破棄ができます。

以上で、簡単なメモ帳ができました(本当に簡単なものですいません。)よろしければ練習に作成をしてみてください。

カテゴリー:ファイル操作

テキストファイルの操作関数

2011.03.23

テキストファイルの操作に関しては通常のファイルストリームより簡易な形で表示をする事ができます。

 

■書き込み用

FileWriter(/*file*/);

■追加書き込み用

FileWriter(/*file*/,true);

■読み込み用

FileReader(/*file*/);

 

ストリームに関する関数は下記を利用します。

■書き込み

_stream.write(_buffer);

■読み込み

_stream.read(_buffer);

■書き込み、読み込みの終了

_stream.close();

以上を利用する事でテキストファイルの操作ができます。

カテゴリー:ファイル操作

バッファ周りの関数を調べる

2011.03.23

今回から、アンドロイドに保存を行う為のバッファーを用いたファイルの操作方法を勉強したいと思います。

バッファは通常のファイルのやりとりをする際にバイナリでのやり取りを行いますが、その領域を確保する為に設定を行います。

byte[] buffer = new byte[512];

としますが、ここで設定を行う占有領域(今回は512)はそのファイルに合わせて変更をを来ないます。

通常だと、***Stream.available()の値を中にいれる事で問題は解決をします。

 

Streamの種類は下記があります。

■書き込み用

FileOutputStream(/*file*/,/*mode*/);

■読み込み用

FileInputStream(/*file*/);

※modeに関しては、Context.MODE_PRIVATEで通常の書き込み、Context.MODE_APPENDで追加での書き込みになります。

 

また、内部の占有領域にあるファイルを利用する場合は下記を使います。

書き込み用

openFileOutput(/*file*/,/*mode*/);

読み込み用

openFileInput(/*file*/);

以上で、書き込み、読み込み用のStreamが利用できます。

 

Streamで下記の関数を用いる事で、書き込み、読み込みを行えます。

■書き込み

_stream.write(_buffer);

■読み込み

_stream.read(_buffer);

■読み込みサイズの想定

_stream.availavle();

■書き込み、読み込みの終了

_stream.close();

 

以上で、ファイルの操作の簡単な説明を行いました。

この後に実践を含め研究していきたいと思います。

カテゴリー:ファイル操作

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする