2011年11月28日月曜日

アクティビティのライフサイクル

  • void onCreate(Bundle savedInstanceState)
    Activiy が始めて作成されるときに呼び出される
  • void onStart()
    Activity がユーザーから見えるようになる直前に呼び出される
  •  void onRestart()
     Activity 停止後、再会するときに呼び出される
  •  void onResume()
    Activity がユーザーとの対話を開始する直前に呼び出される
  •  void onPause()
    システムが別の Activity を開始しようとしているときに呼び出される
  •  void onStop()
     Activity がユーザーから見えなくなったときに呼び出される
  •  void onDestroy()
    Activity が破棄される前に呼び出される


参考:開発の基礎

2011年11月27日日曜日

日付(数字)でテーブル名を作成



String deteTime = "201108151235";
String tableName = "\"" + deteTime + "\"";

 public void onCreate(SQLiteDatabase db) {
  // TODO 自動生成されたメソッド・スタブ
  //Log.d("テーブルネーム", tableName );
            // テームルを作成
  db.execSQL(
    "CREATE TABLE " + tableName + " (" +
                "id INTEGER PRIMARY KEY ,"+
                "kaitou text ,"+
                "age text"+
                ");"
            );
 }

2011年11月26日土曜日

Unfortunately, camera has stopped対策



日本語でのメッセージは、
申し訳ありませんが、カメラは停止しました。

このメッセージが出たら、カメラを起動させても、おなじメッセージが出るので、
カメラのデータをクリアにします。
MENU->アプリの管理->カメラ->データを消去

MENU ->Manage apps -> Camera -> Clear data

カメラのサイズと表示するサーフェイスの大きさの違いで出るみたいなので、
カメラサイズを取得してサーフェイスに設定するとかすればいいみたい。
下の記事にカメラサイズの取得方法とか書いてみた、
サーフェイスビューにカメラの映像をプレビュー

2011年11月25日金曜日

AVDとUSBカメラを繋げて撮影


AVDの設定

撮影した画像はSDカードに保存されるので、 SDカードの設定もしておきます。
追記:
ターゲットに注意してください。
Camera support の設定は無くても大丈夫なようでした。

カメラで撮影した画像の保存場所
右上のフロッピーのアイコンをクリックすればローカルフォルダに保存して、
確認する事が出来る。

AVDのカメラのアイコンから起動するか、
AVDのApps の中のAPI Demos のGraphicsの中のCameraPreviewを
起動させると、最初はUSBカメラでは無い画面が立ち上がって、
MENU ボタンを押してSwitch Cameraを押すとUSBカメラの画面に切り替わる


2011年11月24日木曜日

顔認識テスト


package com.test;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class Test01Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        setContentView(new myView(this));
    }

    private class myView extends View{

     private int imageWidth, imageHeight;
     private int numberOfFace = 5;
     private FaceDetector myFaceDetect;
     private FaceDetector.Face[] myFace;
     float myEyesDistance;
     int numberOfFaceDetected;

     Bitmap myBitmap;

  public myView(Context context) {
   super(context);
   // TODO Auto-generated constructor stub

   BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
   BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
   //myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a0002_006064, BitmapFactoryOptionsbfo);
   
   myBitmap = BitmapFactory.decodeFile("/mnt/sdcard/Pictures/09kaiga-bu.jpg/" , BitmapFactoryOptionsbfo);
   //myBitmap     = myBitmap.copy(Bitmap.Config.RGB_565, true);
   
   
   imageWidth = myBitmap.getWidth();
   imageHeight = myBitmap.getHeight();
   myFace = new FaceDetector.Face[numberOfFace];
   myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
   numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);
   
   Log.d("顔の個数", String.valueOf( numberOfFaceDetected ) );
   
   Face face = myFace[0]; 
   PointF point = new PointF();
   face.getMidPoint(point);//両目の中心座標
   myEyesDistance = face.eyesDistance();//両目間の距離
    
   Log.d("信頼度", String.valueOf( myFace[0].confidence() ) );
   Log.d("両目の距離", String.valueOf( myEyesDistance) );//49.265625
   
   Log.d("x", String.valueOf( point.x) );//211.83594
   Log.d("y", String.valueOf( point.y) );//108.375

  }

  @Override
  protected void onDraw(Canvas canvas) {
   // TODO Auto-generated method stub

            canvas.drawBitmap(myBitmap, 0, 0, null);

            Paint myPaint = new Paint();
            myPaint.setColor(Color.GREEN);
            myPaint.setStyle(Paint.Style.STROKE);
            myPaint.setStrokeWidth(3);

            for(int i=0; i < numberOfFaceDetected; i++)
            {
             Face face = myFace[i];
             PointF myMidPoint = new PointF();
             face.getMidPoint(myMidPoint);
    myEyesDistance = face.eyesDistance();
             canvas.drawRect(
               (int)(myMidPoint.x - myEyesDistance),//162.570315
               (int)(myMidPoint.y - myEyesDistance),//59.109375
               (int)(myMidPoint.x + myEyesDistance),//261.101565
               (int)(myMidPoint.y + myEyesDistance),//157.640625
               myPaint);
            }
  }
    }
}

2011年11月23日水曜日

独自のView でCanvas に座標を指定して表示


package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class Test01Activity extends Activity {
 public class CustomView extends View {
  private Bitmap image;

  public CustomView(Context context) {
   super(context);
   // TODO 自動生成されたコンストラクター・スタブ
   setFocusable(true);
  }

  protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   File srcFile = new File("/mnt/sdcard/Pictures/a0002_006064.jpg");
   try {
    InputStream is = new FileInputStream(srcFile);
    image = BitmapFactory.decodeStream(is);
   } catch (FileNotFoundException e) {
    // TODO 自動生成された catch ブロック
    e.printStackTrace();
   }
   canvas.drawBitmap(image, 0, 0, null);
  }
 }

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // タイトルの非表示
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  // タスクバーの非表示
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

  // Activityに直接を追加する
  setContentView(new CustomView(this));

 }
}

Pictures フォルダの画像をImageView に表示


package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

public class Test01Activity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // タイトルの非表示  
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        //タスクバーの非表示  
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
  setContentView(R.layout.main);

  ImageView v = (ImageView) findViewById(R.id.imageView1);
  
  File srcFile = new File("/mnt/sdcard/Pictures/a0002_006064.jpg");

  try {
   InputStream is = new FileInputStream(srcFile);
   Bitmap bm = BitmapFactory.decodeStream(is);
   v.setImageBitmap(bm);

  } catch (FileNotFoundException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }

 }
}

画面のタスクバーとタイトルバーの非表示



// タイトルの非表示  
requestWindowFeature(Window.FEATURE_NO_TITLE); 
//タスクバーの非表示  
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
        
setContentView(R.layout.main);

Pictures フォルダの取得

sdcard/Pictures フォルダの取得

package com.test;

import java.io.File;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class Test01Activity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
  Log.d("パス", path.toString());

 }
}



Pictures フォルダ内のファイルの個数
Log.d("パス", String.valueOf(path.list(null).length));

Pictures フォルダ内の最初のファイル名
Log.d("パス", path.list(null)[0]);

データベース一覧取得・表示


/data/data/アプリケーション名/databases フォルダ内のファイル名の一覧取得・表示

package com.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Test01Activity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  //Context con = this;
  String[] str = this.databaseList();
  Log.d("個数", String.valueOf(str.length));

  TextView textView1 = (TextView) findViewById(R.id.textView1);

  String text = "";

  for (int i = 0; i < str.length; i++) {
   text += str[i] + "\n";
  }
  textView1.setText(text);
 }
}

テーブル一覧取得・表示


コマンドラインからは .tables で表示される。データベースのテーブル一覧を取得する方法。

Cursor c = db.rawQuery("SELECT * FROM sqlite_master WHERE type='table' ", null);

Log.d("個数", String.valueOf(c.getCount()));


ソースコード全体

package com.test;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Test01Activity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  // ヘルパークラスのインスタンスを作成します。
        MyDBHelper helper = new MyDBHelper(this);
        
        //書き込み可能でデータベースを開く 
        //(ここでDBファイルがなかったら作成する(onCreate)
        SQLiteDatabase db = helper.getWritableDatabase();
         
        Cursor c = db.rawQuery("SELECT * FROM sqlite_master WHERE type='table' ", null);

        Log.d("個数", String.valueOf(c.getCount()));
        
        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);
         
        String text="";
        while (isEof) {
            text += c.getString(1) + "\n";
            isEof = c.moveToNext();
        }
        textView1.setText(text);
         
        c.close();
        db.close();
    }
 
    public class MyDBHelper extends SQLiteOpenHelper {
         public MyDBHelper(Context context) {
             super(context, "database.db", null, 2);
         }
  
         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
          //データベースのバージョンが変わる場合に呼び出される。
             db.execSQL(
                  "create table myDatabaseTable2("+
                  "name text not null,"+
                  "age text"+
                  ");"
              );
   
              // Insert文のSQLを実行してレコードを挿入
              db.execSQL("insert into myDatabaseTable2(name,age) values ('聖徳太子2', 10);");
              db.execSQL("insert into myDatabaseTable2(name,age) values ('夏目漱石2', 20);");
         }
  
         @Override
         //ここでデータベース作成(コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる)
         public void onCreate(SQLiteDatabase db) {
             // テームルを作成
             db.execSQL(
                 "create table myDatabaseTable("+
                 "name text not null,"+
                 "age text"+
                 ");"
             );
  
             // Insert文のSQLを実行してレコードを挿入
             db.execSQL("insert into myDatabaseTable(name,age) values ('聖徳太子', 10);");
             db.execSQL("insert into myDatabaseTable(name,age) values ('夏目漱石', 20);");
         }
     }
 }

その他の確認方法

2011年11月22日火曜日

sql文で検索-特定の行だけ検索

Cursor c = db.rawQuery("Select * From myDatabaseTable WHERE age=10",
                null);

Log.d("個数", String.valueOf(c.getCount()));

2011年11月20日日曜日

画面遷移-アニメーション



アニメーションファイルを4つ作成して画面遷移の際に指定するだけ
startActivityForResult・・・の下に
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
の一文を加える

メイン画面のActivityファイル
package com.slide;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class SlideTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
 public void ButtonOnClick(View v){
      Intent subactivity = new Intent(this,com.slide.SubActivity.class);
      startActivityForResult(subactivity, R.id.button1);
      overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
     }
}

サブ画面のActivityファイル
package com.slide;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class SubActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
    }
 public void ButtonOnClick(View v){
      Intent subactivity = new Intent(this,com.slide.SlideTestActivity.class);
      startActivityForResult(subactivity, R.id.button1);
      overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_right);
     }
}


メイン画面のレイアウトファイル
main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="メイン画面" />
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="次へ" android:onClick="ButtonOnClick"/>

</LinearLayout> 


サブ画面のレイアウトファイル
sub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="サブ画面" />
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="戻る" android:onClick="ButtonOnClick"/>

</LinearLayout>

アニメーションファイルを用意する
resフォルダの中にanimフォルダを作成して、そこにxmlファイルを作成する。

次のアクティビティが右から登場
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:duration="300"
        android:fromXDelta="100%p"
        android:toXDelta="0" />

    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

</set>

現在のアクティビティが左に消える
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />

    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />

</set>

元のアクティビティが左から登場
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:duration="300"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />

    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

</set>

二つ目のアクティビティが右に退場
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:toXDelta="100%p" />

    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />

</set>

サブ画面をマニフェストファイルに追加するのを忘れないようにする。
ダウンロード

テキストビューにボタンのスタイルを設定

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/Button"/>


    <style name="Button" parent="android:style/Widget.Button">
        <item name="android:text">テキストボタン</item>
    </style>

2011年11月19日土曜日

ScrollView内でもフリック動作

ScrollView内ではonTouchEventは使えないようなので、
変わりにdispatchTouchEventを使う。

両方置いた場合、onTouchEventも動いている様でした。

画面を指でなでて画面遷移(移動)


フリック動作で画面遷移

GestureDetecotorクラスのインスタンス
タッチイベント
onFling

package com.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.SimpleOnGestureListener;

public class Test01Activity extends Activity {
    private GestureDetector myGestureDetector;

 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        myGestureDetector = new GestureDetector(new MyGestureListener());
    }
    
 @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (myGestureDetector.onTouchEvent(event))
            return true;
        else
            return false;
    }

 private class MyGestureListener extends SimpleOnGestureListener {
        @Override
        public boolean onFling(
                MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
           
            //float dX = e2.getX() - e1.getX();
            //float dY = e2.getY() - e1.getY();
            //Log.d("タグ",  String.valueOf( dX ) );
            
            Intent subactivity = new Intent(Test01Activity.this, com.test.SubActivity.class);
            startActivity(subactivity);
            
            return false;
        }
    }

    
}

プリファレンスの利用方法

プリファレンスは、データを、キー名と値の組み合わせでxmlファイルに保存する。
ファイルは/data/data/アプリケーション名//shared_prefs フォルダに作成されている。
リファレンス

プリファレンスの保存方法
SharedPreferences pref =
  getSharedPreferences("fileName",MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
  Editor e = pref.edit();
  e.putString("key", "value");
  e.commit();

取得する時は
getString(String key, String defValue);
getInt(String key, int defValue);
getLong(String key, long defValue);
などを使う

プリファレンスの取得方法
SharedPreferences pref =
  getSharedPreferences("fileName",MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
String str = pref.getString("key", "");//キーの値、取得出来なかった解きの値
Log.d("str", str );

他のアプリケーションのプリファレンスの取得方法
String str = null;
try {
 Context ctxt = createPackageContext("com.gyousei", 0);
 SharedPreferences pref = ctxt.getSharedPreferences("pref",
   MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);
 str = pref.getString("key", "");//キーの値、取得出来なかった解きの値
} catch (NameNotFoundException e) {
 e.printStackTrace();
}
Log.d("タグ", str);

2011年11月18日金曜日

dispatchKeyEventでの入力検出

下記コードはハードウェアキーボードの入力しか受け取れない。

public boolean dispatchKeyEvent(KeyEvent event) {
 if (event.getAction() == KeyEvent.ACTION_UP) { // キーが離された時
  Log.d("入力", String.valueOf( event.getKeyCode() ));
    }
    
    return super.dispatchKeyEvent(event);
}

EditTextでの入力検出

下記コードはハードウェアキーボードの入力しか受け取れない。

EditText editText1 = (EditText)findViewById(R.id.editText1);

editText1.setOnKeyListener(new OnKeyListener() {    
    public boolean onKey(View v, int keyCode, KeyEvent event) {
     if (KeyEvent.ACTION_DOWN == event.getAction()) {
            //solveExpression();
      Log.d("入力", String.valueOf( event.getKeyCode()));
            return true;
        }
  return false;
    }
});

ソフトキーボードの入力を受け取りたいのでaddTextChangedListenerを使った方法も
次は試してみようと思います。

2011年11月17日木曜日

xmlファイルの斜体が見にくいので設定

ウインド-設定から順番に選んで斜体のチェックボックスを外す。


値の設定-setText

        TextView textView = (TextView) findViewById(R.id.editText1);
        textView.setText("設定する文字列");

現在の時刻をミリ秒で取得

1970年1月1日からのミリ秒を取得できます。


        //現在の時刻を取得
        long startTime = System.currentTimeMillis();
        Log.d("タグ",  String.valueOf(startTime));//1321464077988と表示される


日付フォーマットで表示
        //現在の時刻を取得
        //現在の時刻を取得
        long startTime = System.currentTimeMillis();
        Date date = new Date(startTime);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd.HH:mm:ss SSS");//
        Log.v("タグ", simpleDateFormat.format(date));//2011.11.17.02:53:38 217

クラス SimpleDateFormat

2011年11月16日水曜日

ローカルファイルの読込み方法

ローカルファイルの書込み方法で作成したファイルを読み込んでいます。


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        FileRead();
 }

 // ファイルを読み込むメソッド
 public void FileRead() {
  try {
   InputStream in = openFileInput("a.txt");
   BufferedReader reader = new BufferedReader(new InputStreamReader(
     in, "UTF-8"));
   String s;
   while ((s = reader.readLine()) != null) {
    Log.d("タグ", s);
   }
   reader.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }


ローカルファイルの書込み方法

下記の例は
/data/data/パッケージ名/files/ファイル名に保存されている。
filesフォルダとファイルが無くても作成されます。

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        FileWrite();
 }

 // ファイルを書き込むメソッド
 public void FileWrite() {
  String s = "text1";
  try {
   OutputStream out = openFileOutput("a.txt", MODE_PRIVATE);
   PrintWriter writer = new PrintWriter(new OutputStreamWriter(out,
     "UTF-8"));
   writer.append(s);
   writer.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

作成されたファイルの確認方法 DDMSのファイルエクスプローラからファイルが作成された事が確認できます。 ファイルの中身の確認は一旦ダウンロードしてから確認できます。

Can't bind to local 8616 for debugger表示を消す

http://stackoverflow.com/questions/3318738/i-get-error-in-ddmscant-bind-to-local-8600-for-debugger-why を参考に

C:\Windows\System32\drivers\etc
hosts ファイルをテキストエディタで開き

#::1             localhost
先頭に#を入れてコメントアウト
127.0.0.1        localhost
を記入する

eclipse の設定
ウインドウ->設定 を開く
Android-DDMS を開いて
ベース・ローカル・デバッガ・ポートにを8604に変更する。
Use ADBHOST にチェックを入れる


hosts を変更したので再起動する。


(参考)
コマンドラインから
adbサーバーを一旦終了させてから、もう一回起動させる
android SDKをインストールした場所で実行する。

e:\soft\android-sdk\platform-tools>adb kill-server

e:\soft\android-sdk\platform-tools>adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

e:\soft\android-sdk\platform-tools>