3. オーバライドメソッドの記述
まず記述済みのonCreateメソッドも含めて、オーバライドするメソッドとその役割を示します。
- onCreateメソッド
- UsbManager の取得
- 独自Intent action でパーミッション依頼用のPendingIntent 作成
- 独自Intent action とアクセサリが外されたときのBroadcastReceiver 登録
- 画面のセットアップ
- onResumeメソッド
- USBAccessory の一覧を取得して、権限チェック。
- 権限があればアクセサリとの接続を開く
- UsbAccessory からファイルデスクリプタを取得しファイルデスクリプタから入出力用の Stream を取得。
- 入力を受け取るためのスレッドを開始
- 権限がなければパーミッションを依頼
- onPauseメソッド
- アクセサリとの接続を閉じる
- onDestroyメソッド
- onCreateメソッドで登録した BroadcastReceiver の解除
Techbooster Activityとライフサイクル
3. Activityライフサイクルのメソッドをオーバーライドする
3.1. メニュー「ソース」ー「メソッドのオーバーライド/実装...」を選択します。
この方法を使うと、継承した親クラスであるActivityクラスのメソッドを知らなくても、間違わずに利用する事ができます。
3.2. 「オーバライドまたは実装するメソッドを選択:」からonDestroy(), onPause(), onResume()のチェックボックスをクリックして選択します。
「挿入ポイント:」が「'onCreate(Bundle)'の後」であることを確認してください。
「OK」ボタンを押します。
| 3つのメソッドを選択(図ではonDestroy()のみ表示されていません。) |
3.3. onDestroyメソッド、 onPauseメソッド、onResumeメソッドのJavaソースの記述を行います。
各々のメソッド内にソースを貼付けてください。
3.4. onDestroyメソッド
@Override
protected void onDestroy() {
unregisterReceiver(mUsbReceiver);
super.onDestroy();
}
3.5. onPauseメソッド @Override
protected void onPause() {
super.onPause();
closeAccessory();
}
3.6. onResumeメソッド @Override
protected void onResume() {
super.onResume();
if (mInputStream != null && mOutputStream != null) {
return;
}
// USB Accessory の一覧を取得
UsbAccessory[] accessories = mUsbManager.getAccessoryList();
UsbAccessory accessory = (accessories == null ? null : accessories[0]);
if (accessory != null) {
// Accessory にアクセスする権限があるかチェック
if (mUsbManager.hasPermission(accessory)) {
// 接続を開く
openAccessory(accessory);
} else {
synchronized (mUsbReceiver) {
if (!mPermissionRequestPending) {
// パーミッションを依頼
mUsbManager.requestPermission(accessory, mPermissionIntent);
mPermissionRequestPending = true;
}
}
}
} else {
Log.d(TAG, "mAccessory is null");
}
}
3.7. 上記3つのメソッドを記述したらファイルを保管してください。「問題」タブで赤×のエラー一覧を見ると、以下のようなエラーが出ているはずです。
3.8. 「Logを解決できません」エラーをダブルクリックし、該当の行に移動し、赤×をクリックして下さい。パッケージのインポートで修正されます。
0 件のコメント:
コメントを投稿