スキップしてメイン コンテンツに移動

SD カードにテキストを保存したい

Android 端末のファイル操作について漠然とやりたいなぁということを書いた記事はこちら

やりたいこと「SDカードにテキストを保存したい」

流れはこんな感じでしょうか

  1. SD カードの状態を取得する
  2. SD カードのパスを取得する
  3. 作成するファイルを作成する
  4. テキストを書き込む
  5. 終了処理



SD カードの状態を取得する

final String state = Environment.getExternalStorageState();
SDカードがマウントされいなければ以降の処理ができません。
対応方法:ユーザにSDカードをマウントして!ってダイアログか何かでお願いする


        // SD カードのマウント状況
        if (!Environment.MEDIA_MOUNTED.equals(state)) {


            // SD カードがマウントされていない(取り外されている)ため
            // SD カードに対するファイル操作はできないため処理を終了します


            Log.w("File", "SDカードがマウントされていません");
            return;
        }


SDカードはマウントされているが読み込み専用になっている場合も以降の処理ができません。
対応方法:ユーザにSDカードが読み込み専用を解除して!ってダイアログか何かでお願いする


        if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {


            // SD カードが読み込み専用になっています
            // SD カードにファイルを作成、書き込み操作ができないため処理を終了します


            Log.w("File", "SDカードが読み込み専用になっています");
            return;
        }




SD カードのパスを取得する

        // SD カードのディレクトリを取得します
        final File extrernalStrageDirectory = Environment.getExternalStorageDirectory();



作成するファイルを作成する

        // 操作対象のファイルを作成
        final File file = new File(extrernalStrageDirectory, "/caldia/temp.txt");




        // ファイルの存在を確認します
        if (!file.exists()) {


            // ディレクトリを作成
            final boolean isMkDirs = file.mkdirs();


            if (!isMkDirs) {


                // ディレクトリ作成処理が失敗したため処理を終了します
                Log.w("File", "ファイル名 : " + file.getAbsolutePath() + " の作成が失敗しました");
                return;


            }
        }

テキストを書き込む


        // ファイル書き込み用ライターを作成します
        final FileWriter fileWriter = new FileWriter(file);


        // テキストを書き込みます
        fileWriter.write(text);


終了処理

        // ライターを閉じます
        fileWriter.close();


Eclipse の DDMS パースペクティブで SDカードの中を表示しました
ファイルが作成されています。
ダウンロードして中身を確認すれば成功したかどうかがわかりますね

コメント

このブログの人気の投稿

Android ロックアプリを作る -調査編 -

Android 端末のスクリーンがOFFになると端末がロックされて、
スクリーンがONになるとロック画面が表示されます。

ロック画面は指の軌跡かパスワードを入力することで解除できます。

このロック画面をアプリとして作ってみたいと思い調査を始めることにしました。

調査の方針としては


色々なロックアプリをダウンロードしてみる。それぞれのパーミッションを見てみる。

という感じです。


色々なアプリをダウンロードしてみる。

まずはロックアプリ特集とかを探してみます。

Google 先生に聞いてみよう > Android ロックアプリ
結構出てきますね。


WidgetLocker LockscreenLockBot ProFロックスクリーン



それぞれのパーミッションを見てみる。

WidgetLocker Lockscreen



android.permission.VIBRATEandroid.permission.DISABLE_KEYGUARDandroid.permission.RECEIVE_BOOT_COMPLETEDandroid.permission.EXPAND_STATUS_BARandroid.permission.GET_TASKSandroid.permission.REORDER_TASKSandroid.permission.SET_PREFERRED_APPLICATIONSandroid.permission.WRITE_SETTINGSandroid.permission.WAKE_LOCKandroid.permission.CALL_PHONEandroid.permission.READ_SYNC_SETTINGSandroid.permission.GET_ACCOUNTSandroid.permission.READ_LOGSandroid.permission.SYSTEM_ALERT_WINDOWandroid.permission.WRITE_EXTERNAL_STORAGEandroid.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATEandroid.permission.ACCESS_WIFI_STATEcom.android.vending.CHECK_LICENSE
LockB…

携帯電話、タブレットの判定にピクセルではなくインチを使う

色々な案件に関わっていると、スマートフォンなのかタブレットなのかの判定をするためにピクセルを使用しているソースを見ることが多くあります。

幅、高さのそれぞれのピクセル数がある値を超えたらタブレットと判定する。


これはだめですよね

HTC j butterfly  はタブレットと判定されることが多くあります。




ディスプレイは約5インチ
w x h : 1080px x 1920px

5インチなので画面サイズが大きいということでタブレットという判定でもいいかもしれない・・・と思ったりしますが7インチ以上をタブレットと判定したい。。。




ピクセル数は画面のサイズ(インチ)とは違います。1080px x 1920px は5インチであるとは限りません。

i9220++ スマートフォン Android 4.0 3G GPS 5.2 インチ800万画素携帯(ブラック)

5.2インチ 画面解像度:960 x 540 pixels QHD screen


HTC j butterfly よりも画面サイズ(インチ)は大きいけれど、ピクセル数は少なくなってます。


ピクセル数で判定するのではなく、インチで判定したほうが正確ですね。



プログラムで画面サイズ(インチ)を計算してみましょう。

ディスプレイ情報を取得する ピクセル数(width, height)を取得するdpi (xdpi, ydpi) を取得する1インチあたりのピクセル数(dot per inch なのでドット数?) インチ(width, height) を計算する画面サイズ(インチ)を計算する
こんな流れになります。他に簡単に取得できる方法があれば教えていただけるとうれしいです。

Activity#onCreateに書きました

// ディスプレイ情報を取得する
final DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

// ピクセル数(width, height)を取得する
final int widthPx = metrics.widthPixels;
final int heightPx = metrics.heightPixels;

// dpi (xdpi, yd…

Mac の ターミナルから アプリをアンインストールする adb uninstall

ant uninstall でもいいんだけれど、ant プロジェクトじゃないこともあるのでメモ

adb uninstall パッケージ名
cVolume next をターミナルからアンインストールする場合
パッケージ名は jp.caldroid.cvolume40 なので

adb uninstall jp.caldroid.cvolume40
となる