[[PortableAndroidDeveloerEnviroment]]


以下は「あま~いアプリ開発」で行った内容です
http://kokucheese.com/event/index/22126/
**レシピ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


アクティビティを追加する度に



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS