[[PortableAndroidDeveloerEnviroment]] **レシピ1 [#h22ae9c0] -プロジェクトを立ち上げる。Package Nameは自分のドメインを指定 -特になければcom.exampleで。但しこの名前だとマーケットに登録できない -RUNする -Android Device Chooserをキャンセルして -Android Virtual Device Managerで「New」を選んでNameをてきとうに -Start-Launch -しばらくすると仮想マシンが出現する -5分ぐらいで画面が出てくる -Hello worldはvalueのstringに入っている **レシピ2 [#y430be03] -res-layout-main.xmlをダブルクリック -Graphical layoutを設定して -layoutのmain.xmlで -From widgetsにあるボタンをぐりぐりもってきてドラッグするだけ -saveしてください **レシピ3 [#t2e766b3] -ボタンにコードを割り振り [#l19492cf] -Button button = (Button)findViewByID(R.id.button1); を11行目と12行目の間にタイプ このままではエラーが出るので Ctfl+Shift+Oでインポートを自動補完 import android.widget.Button; が増えるのでエラーが出なくなる -その次に [#y8adf4f3] button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(HelloWorldActivity.this, "Hello!", Toast.LENGTH_LONG).show(); } }); -これでCtl+Shift+Oを押すとOrganize Importsでandroid.content.DialogInterface.OnClickListener と android.view.View.OnCliclKistenerを選択するようになるがandroid.view.View.OnCliclKistenerを選択する。これはOnClickListenerの引数で判断しないといけない(判断は上級者向) **レシピ04 国際化 [#ha8cd907] res-values-strings.xmlをディレクトリごとコピー valuesとvalues-jaとの二つにする。 values-ja/strings.xmlを日本語に書き換える **レシピ05 タイマー [#ie84e1c5] Toast行を以下に入れ替え new Thread() { @Override public void run() { try{ Thread.sleep(10 * 1000); } catch (InterruptedException e){ e.printStackTrace(); } handler.post(new Runnable(){ public void run() { Toast.makeText(HelloWorldActivity.this,"Hello!", Toast.LENGTH_LONG).show(); } }); }}.start(); ハンドラを作っておく public class HelloPADE2Activity extends Activity { の下に一行追加 private Handler handler = new Handler(); Ctl+Shift+Oでimportを増やしておく **レシピ06:ログ出力 [#t0994725] **スィーツ07:明示的Intent [#zb2c30a6] public class HelloPADEActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { // new Thread() { // @Override // public void run() { // Log.v("hello", "Error"); // try { // new NumberFormatException(); // Thread.sleep(10 * 1000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // handler.post(new Rnnable() { // public void run() { // Toast.makeText(HelloWorldActivity.this, // "Hello!", Toast.LENGTH_LOGNG).show(); // } // }); // } // }.start(); EditText text = (EditText) findViewById(R.id.editText1); String value = text.getText().toString(); Intent intent = new Intent(HelloWorldActivity.this, SecondActivity.class); intent.putExtra("text",value); startActivityForResult(intent, 0); } }); } @Override protected void on ActibityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 0 && resultCode ==1) { String value = data.getExtras().getString("result"); Toast.makeText(this, value, Toast.LENGTH_LONG).show(); } } } ***セカンドアクティビティ [#ja184720] package jp.cane.android.sweet; import android.app.Activityl import android.content.Intent; import android.os.Bundle; public class SecondActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Intent intent = getIntent(); String value = intent.getExtras().getString("text"); // Toast.makeText(this,value,Toast.LENGTH_LONG.show(); value = "こんにちは、" + value; Intent data = new Intent(); data.putExtra("result",value); setResult(1); finish(); } } **スィーツ08:暗黙的Intent [#w009031b] package jp.cane.android.sweet; import android.app.Activityl import android.content.Intent; import android.os.Bundle; public class SecondActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Intent intent = getIntent(); String value = intent.getExtras().getString("text"); // Toast.makeText(this,value,Toast.LENGTH_LONG.show(); value = "こんにちは、" + value; Intent data = new Intent(); data.putExtra("result",value); setResult(1); finish(); } } **スィーツ09:返り値をIntentで受け取る [#f4a6eb3e] **スィーツ10:サービス [#v02906ed] New-classで、MainService.java できたらextendedのサービスを追加 を以下のように作る package jp.cone.android.sweet;{ import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MainService extends Service { @Override public void onCreate() super.onCreate(); } @Override public IBinder onBind(Intent intent) { return null; } } その次に、以下のように拡張する public class MainService extends Service implements Runnable { private Handler handler = new Handler(); @Override public void onCreate() super.onCreate(); new Thread(this).start(); } @Override public IBinder onBind(Intent intent) { return null; } public void run() { while (true) { try { Thread.sleep(3 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } handler.post(new Runnable() { public void run() { Toast.makeText(MainService.this, "Hello", Toast.LENGTH_LONG).show(); } }); } } } このサービスは問題があって、AndroidOSから勝手にkillされる。それを防ぐためにはstartforgroundとかをやると終了されなくなる。 **お口直し:Bluetooth通信 [#rf3f2d03] MainService.javaを書き換え public void run() { handler.post(new Runnable() { public void run() { adapter = BluetoothAdapter.getDefaultAdapter(); } }); while (adapter == null) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } while (true) // try { // Tread.sleep(3 * 1000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // handler.post(new Runnable() { // public void run() { // Toast.makeText(MainService.this, "Hello", Toast.LENGTH_LONG).show(); // } // }); try { BluetoothSocket socket; if (true) { // server BluetoothServerSocket ssocket = adapter .listenUsingRfcommWithServiceRecord("BTChat", UUID.fromString(UI_MODE_SERVICE)); socket = ssocket.accept(); } else { // client socket = adapter.getRemoteDevice("00:11:22:33:44:55") .createRfcommSockeToServiceRecord( UUID.fromString(UI_MODE_SERVICE)); socket.connect(); } // if server , move below one line to "point B". socket.getOutputStream().write("hogehoge\n".getBytes()); InputStream is = socket.getInputStream(); BufferedReader reader = new BufferdReader( new InputStreamReader(is)); final String line = reader.readLine(); handler.post(new Runnable() { public void run() { Toast.makeText(MainService.this, line, Toast.LENGTH_LONG).show(); } }); // point B } catch (IOException e) { // TODO Auto-genereted catch block e.printStackTrace } パーミッションを追加する必要がある res-AndroidManifest.xmlのAndroid Manifest Permissionsでon.BLUETOOTH on.BLUETOOTH_ADMIN アクティビティを追加する度に