2012年2月26日日曜日

Send Mail

Intentを使用したMailを送信するアプリです。
送信するメールアドレスを用意します。
String to = new String("xxxxx@gmail.com");
メールの題名を用意します。
String title = new String("Hello");
メールの本文を用意します。
String text = new String("test");
Intentを生成してアクションを設定します。
Intent in = new Intent();
in.setAction(Intent.ACTION_SENDTO);
メールアドレスを設定します。
in.setData(Uri.parse("mailto:" + to));
メールの題名を設定します。
in.putExtra(Intent.EXTRA_SUBJECT, title);
メールの本文を設定します。
in.putExtra(Intent.EXTRA_TEXT, text);
メールを送信します。
startActivity(in);
ソースコードは ここです。
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。

mp3ファイルの再生

mp3の音楽ファイルを再生します。
MediaPlayerのクラスを用意します。
MediaPlayer mP = new MediaPlayer();
mp3のファイルを設定します。
mP.setDataSource("/sdcard/music/sample.mp3");
prepare() と start() を呼びます。
mP.prepare();
mP.start();
prepare() と setDataSource() は、 try / catchで括る必要があります。
ソースコードは ここです。
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。

2012年2月19日日曜日

SpeechRecognizer

音声認識のクラス SpeechRecognizer classを確認しました。
インスタンスを生成する方法は、 createSpeechRecognizer(Context) をコールします。
SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
認識結果を受信するclassを作ります。
class MyRecognitionListener implements RecognitionListener {

 @Override
 public void onBeginningOfSpeech() {
  Log.d("Speech", "onBeginningOfSpeech");
 }

 @Override
 public void onBufferReceived(byte[] buffer) {
  Log.d("Speech", "onBufferReceived");
 }

 @Override
 public void onEndOfSpeech() {
  Log.d("Speech", "onEndOfSpeech");
 }

 @Override
 public void onError(int error) {
  Log.d("Speech", "onError");
 }

 @Override
 public void onEvent(int eventType, Bundle params) {
  Log.d("Speech", "onEvent");
 }

 @Override
 public void onPartialResults(Bundle partialResults) {
  Log.d("Speech", "onPartialResults");
 }

 @Override
 public void onReadyForSpeech(Bundle params) {
  Log.d("Speech", "onReadyForSpeech");
 }
 

 @Override
 public void onResults(Bundle results) {
  Log.d("Speech", "onResults");
  ArrayList strlist = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
  for (int i = 0; i < strlist.size();i++ ) {
   Log.d("Speech", "result=" + strlist.get(i));
  }
 }

 @Override
 public void onRmsChanged(float rmsdB) {
  Log.d("Speech", "onRmsChanged");
 }
 
}
その中で一番重要なのは、onReuslt() の関数です。resultsの中に認識結果を格納しています。
public void onResults(Bundle results) {
 Log.d("Speech", "onResults");
 ArrayList strlist = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
 for (int i = 0; i < strlist.size();i++ ) {
  Log.d("Speech", "result=" + strlist.get(i));
 }
}
先ほどのListerクラスを生成します。
MyRecognitionListener listener = new MyRecognitionListener();
Listenerクラスを設定します。
sr.setRecognitionListener(listener);
音声認識を開始します。
sr.startListening(RecognizerIntent.getVoiceDetailsIntent(getApplicationContext()));
onResults()は、 1度だけコールされるようです。 "english"と言ってみました。
その結果です。
result=リング
result=english
result=ring
result=イング
result=ing
認識されました。
android.permission.RECORD_AUDIOのパーミッションの設定とネットワークが有効になっていることが必要です。

ソースコードはここです。
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。

2012年2月9日木曜日

Camera Lock API

最近、NexusOneが2.3.6にバージョンアップされました。
以前、動いていたCamera ClassのLock() APIを使用するサンプルプログラムが動かなくなりました。
いろいろ試してみたところ、MediaRecorderでsetVideoSize()を設定することで動作するようになりました。
以下のプログラムは、NexusOne, Xperia rayで動作確認をしました。

_mediarecorder = new MediaRecorder();
_mediarecorder.setCamera(_camera);
_mediarecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
_mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
_mediarecorder.setVideoSize(640, 480);//Add
_mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
ソースコードはここです。
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。

2012年2月5日日曜日

get sdcard path

SD card のpath調べました。
File file = Environment.getExternalStorageDirectory();
Log.d("test", file.getPath());
結果をLogcatで表示しました。
/mnt/sdcard
xperia rayで、shellから"cd /sdcard"としても"/mnt/sdcard/"に移動しました。なんで?
source code is here.
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。

2012年2月1日水曜日

getNetworkInfo

getNetworkInfo()の関数を使いました。

最初に、ConnectivityManager classを取得します。
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo クラスを取得します。例として TYPE_MOBILE の情報を取得しました。
NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
Wifiと3Gが使用できる状態で、setNetworkPrefernce()を使用して、ネットワークの使用優先度を変更しようと主ましたが、変更されませんでした。
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
If you use setNetworkPreference(), you must add CHANGE_NETWORK_STATE feature.
ソースコードはここです。
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。