2012年1月10日火曜日

イチからつくるADK「AdkLedの作成その2」MainActivityのフィールドとonCreateの記述

イチからつくるADK「AdkLedの作成その1」の続きです。前回はAndroidプロジェクトを作成しレイアウトXMLを記述しました。次は、MainActivityクラスのJavaソースを順序立てて作成していきます。


2.「MainActivity.java」のソースコード記述

2.1. まずはプロジェクトタブから「AdkLedProj」ー「src」ー「jp.socym.adkled」ー「MainActivity.java」をダブルクリックしてファイルを表示させます。

2.2. 6行目のMainActivityクラスの宣言部に「implements Runnable」を記述します。
ADKはスレッドを用いるためにRunnableクラスを実装します。
 
 行番号の左側に赤×が表示されました。赤×をクリックすると以下の様にエラーを修正する候補が表示されます。

2.3. 候補の一番上にある「実装されていないメソッドの追加」を選択してください。

 MainActivityクラス内に、スレッド利用時に実行されるrunメソッドが追加されました。
必ず実行されるためオーバライドする必要があります(そのためアノテーション「@override」がついています)。
中身は空です。後ほどソースを記述しますが今はそのままにしておきます。

2.4. 次に、フィールドを記述します。
 7行目の下に以下のJavaソースを貼付けてください。
    private static final String TAG = "AdkLed";
    private static final String ACTION_USB_PERMISSION = "jp.co.socym.adkled.action.USB_PERMISSION";

    private PendingIntent mPermissionIntent;
    private boolean mPermissionRequestPending;

    private UsbManager mUsbManager;
    private UsbAccessory mAccessory;

    ParcelFileDescriptor mFileDescriptor;

    FileInputStream mInputStream;
    FileOutputStream mOutputStream;
   
    private ToggleButton mToggleButton;
    private TextView mLedStatusView;
    private TextView mStatusView; 
 
貼付け終わると、以下の図の様たくさんの赤×がでます。

2.5. 先頭(ここでは11行目)の赤×から、クリックしてエラーを修正していきます。
すべてパッケージのインポートで修正可能です。

赤×(エラー)が消えて、黄色い三角(警告)になりますが、ソースを記述していくたびに消えていきますので、そのままにしておきます。

2.6. 次に、onCreateメソッドの中を記述していきます。
アウトラインタブの中にある「onCreate(Bundle):void」をクリックして、onCreateメソッドの先頭に移動します。

アウトラインタブを使うと、ソースコードが長くなってもジャンプリストでメソッドやクラスを見つけて移動できます。

2.7. onCreateメソッドの中身を以下の様に記述してください。38行目までは同じ内容ですが、39行目〜70行目までを入れ替えます。
   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // UsbManager のインスタンスを取得
        mUsbManager = UsbManager.getInstance(this);

        // 独自パーミッション用 Broadcast Intent
        mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);

        // 独自パーミッション Intent とアクセサリが取り外されたときの Intent を登録
        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_USB_PERMISSION);
        filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
        registerReceiver(mUsbReceiver, filter);

        setContentView(R.layout.main);
      
        mToggleButton = (ToggleButton) findViewById(R.id.toggleBtn);
        mLedStatusView = (TextView) findViewById(R.id.ledState);
        mStatusView = (TextView) findViewById(R.id.status);
      
        mToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
          
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                byte command = 0x1;
                byte value = (byte) (isChecked ? 0x1 : 0x0);
                sendCommand(command, value);
            }
        });

        enableControls(false);

    }
最後の「}」の数が揃う様に気をつけてください。
記述した後、下図の様に3つの赤×エラーが出ていると思います。

3つの赤×エラーは、後ほどソースを追加するメソッドやフィールドですのでそのままにしておきます。次は、Activityのライフサイクル上のメソッドを必要なものをオーバーライドしていきます。

0 件のコメント:

コメントを投稿