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

音声認識 RecognizerIntent

簡単な音声認識を使用する

private static final int REQCODE = 1234;

private void voiceRecognize() {
    try {
        // インテントを作成
        Intent intent = new Intent(
                RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        // ウェブサーチを使う場合は
        // ACTION_WEB_SEARCH

        intent.putExtra(
                RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(
                RecognizerIntent.EXTRA_PROMPT,
                "音声認識テスト");

        // アクティビティの呼び出し
        startActivityForResult(intent, REQUEST_CODE);

    } catch (ActivityNotFoundException e) {
        // 音声認識に対応していない場合
        Toast.makeText(this,
                "音声認識に対応していません",
                Toast.LENGTH_LONG).show();
    }
}

続きを読む…»

2,787 views

メール送信(メーラーを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,563 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,589 views

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

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

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

<a href="http://maps.google.com/maps?daddr=35.65860811863414,139.7455318066551">ナビ起動</a>
2,330 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();とすると通常の表示になってしまう
13,837 views