カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

メール送信(メーラーをGmailに指定)

メーラーを起動する際に、起動するメーラーをGmailに指定したい場合

Intent intent = new Intent(Intent.ACTION_SEND);

String[] strTo = { "to@example.jp" };

intent.putExtra(Intent.EXTRA_EMAIL, strTo);
intent.putExtra(Intent.EXTRA_SUBJECT, "件名");
intent.putExtra(Intent.EXTRA_TEXT, "本文\n");

intent.setType("message/rfc822");

intent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");

startActivity(intent);

複数の宛先への送信や、添付ファイルについては[他アプリと連携]を参照

6,695 views

ファイル入出力(SDカード)

ローカルファイルへのアクセスについては[ローカルファイルのアクセス]、[ファイル入出力 [Android]]でも紹介しています。

同様の方法でおこなうとSDカード上のファイルの読み書きはできません。
ローカルファイルを読み込み・保存する場合はopenFileOutputメソッド等を使用しますが、引数に指定するファイルパスはフルパスではなく、ファイル名のみです。
引数に「/」(パスのセパレイター)が使用できなくなっています。

[スクリーンショットの保存]でも保存方法の違いを書いていますが、改めてSDカードのファイル入出力について書いておきます。

テキストファイルの読み書きを例とします。

テキストファイルの読み込み

private void readFile(String filename) {

    FileInputStream inputStream = null;
    BufferedReader reader = null;

    try {
        inputStream = new FileInputStream(filename);
        reader = new BufferedReader(
                new InputStreamReader(inputStream));
        String line;
        while ((line = reader.readLine()) != null) {
            //Log.v(TAG, line);
            //読み込んだデータの処理を記述
        }

    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

テキストファイルの書き込み

private void writeFile(String filename, String src){
    try {
        FileOutputStream outputStream = new FileOutputStream(filename);
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(outputStream));
        writer.write(src);
        //writer.flush(); //flushでも書き込んでくれるよう
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
2,723 views

ウェブページからナビを起動

単純にナビを起動するなら、以下のようにリンクを貼るだけです。
但し、経路を表示するまでに3タッチ必要です。

※引数に与える座標は世界測地系(WGS84)です。

<a href="http://maps.google.com/maps?daddr=35.65860811863414,139.7455318066551">ナビ起動</a>
2,460 views

ダイアログの表示位置を指定する

AlertDialog.Builder ad = new AlertDialog.Builder(this);

ad.setTitle("タイトル");
ad.setMessage("テストダイアログ");
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {
	public void onClick(DialogInterface dialog, int whichButton) {
		//OKボタンの処理
		}
});

ad.setNegativeButton("Cancel", null); //何もしないのでnull

AlertDialog alertDialog = ad.create(); //ここでダイアログをalertDialogに渡す

WindowManager.LayoutParams lp = alertDialog.getWindow().getAttributes();

lp.gravity = Gravity.TOP;      //画面上部に
//lp.gravity = Gravity.LEFT;   //画面左側に
//lp.gravity = Gravity.RIGHT;  //画面右側に
//lp.gravity = Gravity.BOTTOM; //画面下部に

//透明にすることもできます
//lp.alpha = 0.8f;

alertDialog.getWindow().setAttributes(lp);
alertDialog.show(); //ここでad.show();とすると通常の表示になってしまう
14,112 views

SDカードのパスを取得

String PATH = Environment.getExternalStorageDirectory().getPath();

環境変数からSDカードのパスを取得

// SDカードのパスを取得
public static String getExternalStoragePath() {
    String path;

    // Sumsung GALAXY Tab SC-01C 対応
    path = System.getenv("EXTERNAL_STORAGE2");
    if (path != null) return path;

    // MOTOROLA Photon ISW11M 対応
    path = System.getenv("EXTERNAL_ALT_STORAGE");
    if (path != null) return path;

    // その他機種
    return System.getenv("EXTERNAL_STORAGE");
}
2,718 views