IT技術を通じて、社会に貢献する企業を目指します。
ホーム ≫ スマートリモコンサンプル解説
 ダウンロード  使用法  ソース解説  改造について  参考リンク 

このページについて

このページはサンプルアプリを利用、並びに改造するための情報を提供します。java言語やAndroid開発について基本的な知識をお持ちの方を前提に記述しています。

スマートリモコンの外観や仕様についてはこちらのページを参照してください。

ダウンロード

サンプルアプリのソースのダウンロードはここをクリック

===【動作環境】===

サンプルアプリのソースはEclipse3 + Android SDK がインストールされている環境を想定しています。Android Version2.3.3 (API LEVEL 10)以上でないと動きません。また実機(タブレット端末を推奨)が必要です。
(USBケーブルと実機に対応したドライバが有ればUSBを介してダウンロード、実行できます)
携帯端末ではボタンが全て表示されない場合があります。その場合にはレイアウトファイル(main.xml)を改造してください。

サンプルアプリの使用法

開発環境を利用して行う場合

  • サンプルアプリソースをダウンロードして解凍します。
  • Eclipseを起動してワークスペースを解凍先ディレクトリに設定します。
    (上手く構築できない場合には新たにAndroidプロジェクトをEclipse上で作成して手動でソース、並びにリソース(res)を解凍したファイルの中からコピー&ペーストして作成してください)
  • Eclipseではソースは自動でビルドされます。
  • プログラム本体は「RemoteControl.apk」と言う名前です。
  • プログラム本体をUSBを経由してインストールするか、Web上にアップロードしてブラウザを利用してダウンロード&インストールします。
  • プログラムを実行します

ソース解説

ツリー構成


    / -------------- プロジェクトルート
       |
       |-- AndroidManifest.xml     マニフェスト
       |-- .project                プロジェクトファイル
       |-- .classpath              クラス階層
       |-- assets
       |
       |-- bin                     コンパイル後のバイナリ格納(自動生成)
       |
       |-- gen                     コンパイル後のリソースバイナリ格納(自動生成)
       |
       |-- res                     リソースファイル群(表示文字などのリソース)
       |
       |-- src
            |
            |-- jp
                |
                |-- systec
                      |
                      |-- android
                            |
                            |-- RemoteControl
                                   |
                                   |-- RemoteControl.java --- メインウィンドウ
                                   |
                                   |-- DeviceListActivity.java --- 機器接続ダイアログウィンドウ
                                   |
                                   |-- FileReadWrite.java --- 主にストレージの読み書きを処理
                                   |
                                   |-- RemoteControlService.java --- デバイスとの通信処理


				

各ファイルの機能

  • RemoteControl.java:メイン処理、ユーザーインターフェイスを担当
  • DeviceListActivity.java:BlueToothペアリング処理を担当
  • FileReadWrite.java:学習したデータの読み書きを担当
  • RemoteControlService.java:BlueToothデバイスとの通信処理

処理流れ

大まかな流れと処理担当部分は以下の通りです。


    操作     呼び出される関数             備考
    起動     RemoteControl::OnCreate  --- 初期化
      ↓                                  この時に外部ストレージがあるかどうかを判別します
      ↓                                  存在する場合には、タイトルの右に(*)マークが付きます
      ↓
      ↓     RemoteControl::OnStart   --- 既存ペアリングデバイスの検出と確認ダイアログ表示
      ↓                                  
      ↓                                  「はい」でデバイス接続後通常起動
      ↓                                  「いいえ」で接続しないで通常起動
      ↓
      ↓
    接続     RemoteControl::connectExistingDevice --- 接続処理
      ↓
      ↓
      ↓← ※1
      ↓
      ↓
    学習モード切り替え     (オプションメニュー→モード切替)
      ↓
      ↓
    (学習)      (該当ボタンをタッチ)
      ↓        RemoteControl::button_event()
      ↓        RemoteControl::button_event2()
      ↓             |
      ↓        sendMessage()  ---- 学習コマンド送信ご待機状態
      ↓
  (リモコンボタン押下)
 (コマンド受信)RemoteControl::mHandler 
      ↓              |
      ↓              |
      ↓         handleMessage(Message msg)   --- ここでデバイスから読み込み処理を実施
      ↓              |                           同時に外部ストレージにデータを保存処理
      ↓              |(MESSAGE_READ)
      ↓        data2ExtStrage()  --- 学習データをストレージに保存(外部、内部は自動判定されます)
      ↓
      ↓
  赤外線送信   RemoteControl::button_event(), RemoteControl::button_event2()
      ↓              |
      ↓              |
      ↓      sendMessage() --- ここでストレージから保存したデータを
      ↓                        読み出して送信
      ↓                        学習されていないボタンを実行すると
      ↓                        「学習されていないボタンがタッチされました」メッセージが出ます。
      ↓
      ↓
      ↓    いいえ
  (終了?)→→→→→ ※1
      ↓はい
      ↓
      ↓
     終了    RemoteControl::onDestroy()  --- 接続の切断

     レジューム状態に入り、復帰したときには※1の状態になります。

				
通常画面 通常画面
 

通常はこのモードで操作します

学習画面 学習モード画面
 

新たに学習させたいときにはこのモードで操作します

 

ボタン対応表(既定)

ボタン変数&キャプション&保存ファイル名対応表
ボタン変数キャプション保存ファイル名
mButton1地デジdata2_1
mButton2BSdata2_2
mButton3CSdata2_3
mButton4未使用data2_5
mButton5未使用data2_5
mButton6番組表data2_6
mButton7未使用data2_7
mButton8メニューdata2_8
mButton9(青)data2_9
mButton10(赤)data2_10
mButton11(緑)data2_11
mButton12(黄)data2_12
mButton13data2_13
mButton14data2_14
mButton15data2_15
mButton16CH+data2_16
mButton17音声+data2_17
mButton18未使用data2_18
mButton19(上)data2_19
mButton20未使用data2_20
mButton21(先頭)data2_21
mButton22data2_22
mButton23data2_23
mButton24(末尾)data2_24
mButton25data2_25
mButton26data2_26
mButton27data2_27
mButton28CH-data2_28
mButton29音声-data2_29
mButton30data2_30
mButton31決定data2_31
mButton32data2_32
mButton33(巻き戻し)data2_33
mButton34(再生)data2_34
mButton35未使用data2_35
mButton36(早送り)data2_36
mButton37data2_37
mButton38data2_38
mButton39data2_39
mButton40未使用data2_40
mButton41未使用data2_41
mButton42未使用data2_42
mButton43(下)data2_43
mButton44未使用data2_44
mButton45(録音)data2_45
mButton46(停止)data2_46
mButton47未使用data2_47
mButton48(一時停止)data2_48
mButton4910data2_49
mButton5011data2_50
mButton5112data2_51
mButton52入力data2_52
mButton53消音data2_53
mButton54戻るdata2_54
mButton55未使用data2_55
mButton56終了data2_56
mButton57予備1data2_57
mButton58予備2data2_58
mButton59予備3data2_59
mButton60電源data2_60

変数名やファイル名などはソースを変更することにより自由に変えることができます。

ファイルの保存先ディレクトリは通常、/mnt/sdcard/Android/data/(プロジェクト名)/files です(端末によって異なります)

 

改造について

改造について

●サンプルソースは自由に改変してかまいません(改造後のソースを非公開も可です)

●このサンプルでは音声などの調整などボタンの継続押し(押しっぱなしによる連続コマンド送信)には対応していません。

●短い間の連続タップ(ダブルクリック、トリプルクリックなど)操作を行うとリモコンが追従しないことがあります。
その場合には マクロ定数 INHIBIT_TIME をお使いのアンドロイド端末にあわせて調整してください。

●この機能が不要な場合にはボタンイベント処理部分(button_event(),button_event2())の次の文を削除してください。


                inObj.setEnabled(false);  //無効にする
                if(mTimer == null){
                    //タイマーの初期化処理
                    timerTask = new ButtonTimerTask();
                    mTimer = new Timer(true);
                    mTimer.schedule( timerTask, INHIBIT_TIME);
                    if(D){Log.d(TAG, "button_event() --- Timer is Enabled.");}
                }
                

●学習したリモコンデータは内部、または外部ストレージに保存されますが、Android端末によってはアプリをアンインストールするとデータが削除される場合もありますので、アンインストールする場合には外部のSDカード等にバックアップをとっておくと安心です。(外部メディアがあるかどうかは RemoteControl.java isExternalStorageAvailable() で行っています)

外部のSDカードを直接指定して保存したい場合には、onCreate() 内、mExternalDirectory に SDカードのディレクトリを指定してください。(指定例: mExternalDirectory ="/mnt/sdcard")

画面のレイアウト(ボタンサイズを変更など)は main.xml を変更してください。

画面下部の送受信データウィンドウにデータを表示したくない場合には DWIN 変数を false にしてください。(既定ではfalseに設定)

●この他の処理についてはソース内コメントを見てください。

参考リンク