BluetoothのSPPプロファイルでファイル(の中身)を送信するアプリケーション

SPPでBTデバイスにデータを送る実験をしていたが、
端末のコンソールに入力したテキストを送信するアプリはあっても、ファイルの中身を
送信するアプリがなかったので作成。

BTソケットのOutputStreamに、FileInputStreamで読み込んだファイルをWriteしている。

ダウンロード先↓

Android app on Google Play

サムネイル


気象庁のウェブサイトに

全国観測値ランキングがあります。
このページからデータを抽出、変換して、独自形式xmlでの配信を試みてみました。

気象庁のデータは既にxml化されているようですが(気象庁の天気予報情報をメタデータ化→XML 形式にしてみた) 全国観測値ランキングは、xml化されていなかったので今回作成してみました。

ところが作成した後で気づいたのですが、すでに日本気象協会がtenki RSSというのを配信していました。2010年12月から配信を始めたそうです。

天気予報、アメダス、災害情報と豊富なデータがRSS化されています。ヘルプを読むと、個人運営のサイトなら使用可能であることが書いてあります。(課金モデルのサイトは除く) Androidアプリでも結構利用されているようです。

というわけで独自のxmlで配信する必要がなくなってしまいましたが、せっかく作ったのでアップロードしたいと思います。データは、cronをつかってPHPで定期的に取得し(毎時10分)、xml化しています。xmlを使用したwebサービスも作ってみたいと思います。


:: 全国観測値ランキングのXML ::

日最高気温の高い方から

日最低気温の低い方から

1時間降水量の日最大値(5mm以上のみ)

3時間降水量の日最大値(5mm以上のみ)

24時間降水量の日最大値(5mm以上のみ)

72時間降水量の日最大値(5mm以上のみ)

日降水量(5mm以上のみ)

日最大風速

日最大瞬間風速

積雪の深さ(現在の値)

24時間降雪量(現在の値)


:: メタデータ ::

XML スキーマ

※1 値の単位は、気温=℃、降水量=mm、風速=m/sです。
※2 データに付加する記号です。normal=正常値、quansi=”準正常値”、lackOfData=”資料不足値”です。それぞれの言葉の意味は凡例に詳細が記載されています。

 
Google Dart公式サイトにてDart Editorが発表されました。

 
Dart Editor は、Eclipseコンポーネントベースのオープンソースエディターです。
Dartの編集と、DartからJavascriptへのコンパイルおよび、作成したWebアプリの実行ができます。

 
早速チュートリアルに習って試してみました。
 


1. ダウンロード&インストール


32ビット版と64ビット版があるので、自分の環境に合ったほうを選んでダウンロードしますッ 。ベータ版を試したい場合は黄色の枠内のDartEditorをダウンロードします。

 

次に、ダウンロードしたzipファイルを適当な場所に解凍します。




2. 起動

解凍してできたフォルダ内にあるDartEditor.exeをダブルクリックして実行します。
実行には JRE (Java Runtime Edition)が必要です。(こちらからダウンロードできます。)


 
起動後の画面


 


3. サンプルプログラムの実行

Dart Editorにはサンプルプログラムが付属しています。このプログラムをEditorから開いてみます。 メニューのFile-> Openを選択します。


 
sunflower.dartを選択します。sunflower.dartは、インストールしたフォルダのsamples\sunflower以下にあります。


 
Sunflower.dartを選択すると、以下のようにプロジェクトが表示されます。左のライブラリ列には、dartファイルのほかに、htmlファイルやcssファイルが並んでいます。また、インポートしたライブラリも列挙されています。


 
緑色の実行ボタンを押すとブラウザ上でプログラムが起動します。
その際、Google Chromeがデフォルトブラウザになっている必要があります。


 
実行したところ



4. プロジェクトの新規作成

今度は、新規にプロジェクトを作成してみます。
メニューのFile -> New Application… を選択します。


 
プロジェクト名を入力してFinishを押せばプロジェクトの作成が完了します。


 
初期状態で、プロジェクト名とHelloWorldを表示するアプリケーションが作成されます。


 
初期状態でdartから変換されたJavaScriptファイルを確認してみると、 なんと6MBもありました。公式サイトでは「ファイルがでかくなるけど心配するな。これから直す」と言っています。これから改善されるのでしょうか。

googleが、構造化webプログラミング言語のDartを発表しました。

公式サイトを開くとトップページの、”Dartboard”にサンプルプログラムが表示されます。
“Dartboard”とは、Dartをブラウザ上で実行するための簡易環境です。


C言語やJava言語を学んだことのある人には親しみのあるインタフェースです。

実行は、

  • DartからJavascriptへの変換を行う
  • サーバーサイドにDartのVMを載せる
  • Dartboard上でソースコードを作成、修正する

のいずれかの方法で行います。

テクニカルオーバービューや、チュートリアルを読んでみると
まだまだ開発途上といった様子です。

公式サイト: http://www.dartlang.org/

概要


前回作成したAir for Android用 Alertダイアログをベースに、質問ダイアログを作成しました。

Alertダイアログでは、Yes,No,Cancelからの選択でしたが、今回作成したダイアログでは任意の文字列をボタンに割り当てられるようにしました。ボタンの数も自由に変更できます。(画面に表示可能な範囲で)
 


仕様


AlertDialogからのチョイ変です。

  1. static関数 CustomQuestionDialog.show()で表示
  2. ダイアログが閉じたときに、CloseEventをディスパッチ
  3. CloseEvent.detailに、選択結果(選択されたボタンのインデックス)を格納

としました。

 

ダウンロード


  ・ライブラリファイル(.swcファイル)
  ・プロジェクトファイル(.zip)
  ・ASDoc(APIリファレンス)

 

使い方


1. ライブラリファイル(CustomQuestionDialog.swc)を、プロジェクトのlibフォルダにおきます。




 

2.確認ダイアログを表示したいときに、CustomQuestionDialog.show()関数を呼びます。

1
2
3
4
5
6
7
CustomQuestionDialog..show(
                   this,
                   "メッセージ",
                   "タイトル",
                   ["選択肢1","選択肢2","選択肢3"]
                   onCloseQuestionDialog
                );

引数として、

  1. ダイアログの親のDisplayObject
  2. 表示するメッセージ
  3. ダイアログのタイトル
  4. ボタンに表示するテキスト(選択肢)の配列
  5. ダイアログが閉じたときに呼ばれる関数 (CloseEventのEventListenner, デフォルト: null)

を指定します。

 

3.確認ダイアログが閉じたときに呼ばれる関数(CloseEventのEventListener)を作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/** Dialogが閉じたときに呼ばれる関数 */
private function onCloseQuestionDialog
        (event:CloseEvent):void        
{
    /* ボタンの押下結果を取得する */
    var result:int = event.detail;
           
    if(result == 0)
    {
        /* 0番目のボタンを選択したとき */
        trace(0);
    }
    else if(result == 1)
    {
        /* 1番目のボタンを選択したとき */
        trace(1);
    }
    else if(result == 2)
    {
        /* 2番目のボタンを選択したとき */
        trace(2);
    }
    else if(result == -1)
    {
        /* xボタンでキャンセルしたとき */
        trace(-1);
    }
    else
    {
        /* 未到達コード */
        trace("その他");
    }
}

CloseEventのdetailに、ダイアログでのボタンの押下結果が含まれます。

  ・0番目(1番上のボタン)が選ばれたときは、1
  ・1番目(上から2番目のボタン)が選ばれたときは、2
  ・………
  ・キャンセル(xボタン)が選ばれたときは、-1
 
が格納されます。

EclipseからSubversionをつかうときに
だいぶ手間がかかってしまったのでメモ的に残しておきます。(Windowsの場合)

 

hetemlでのSVNサーバーの構築


hetemlに方法が載っているのでこれを参考にします。
SSH アカウントの作成方法
SVN ご利用時の設定( Windows の場合)

 

Eclipse側の設定(FlashBuilderもEclipseベースなので同様)


1. まず、EclipseにSVNクライアントのプラグイン、Subclipseを導入します。

subclipse プロジェクト ホーム のDownload and Installから、使用中のEclipseのバージョンに合うSubclipseの更新サイトを探します。今回は、Eclipse3.5を使用したので、http://subclipse.tigris.org/update_1.6.xが更新サイトとなります。



2 Eclipseのメニュー -> ヘルプ -> 新規インストールを選択します。



3 1.2で、表示されたウィンドウの作業対象:に、1.1で見つけたURLを入れ、追加ボタンを押します。



4 名前は、適当にSubclipseなどと入れておきます


5 インストールするものを選択して、次へ-> ボタンをおします。
次へ->ボタン押すと、インストールするソフトウェアの一覧が表示されます。そのまま次へ->ボタンをします。
その後、利用規約に同意を選択し、完了ボタンを押します。


6 インストール開始前に、以下のような画面がでるのでOKを選択します。
OKを選択すると、インストールが始まります。
インストールが完了すると、Eclipseの再起動が求められるので再起動します。

 



 

環境変数の設定


1 環境変数 SVN_SSHに、 hetemlでのSVNサーバーの構築でダウンロードしたTortoiseSVNに付属するTortoisePlink.exeのパスを入力します。

C:\Program Files\以下にインストールした場合は、
C:/Program Files/TortoiseSVN/bin/TortoisePlink.exeを入力します。\ではなく、/でパスを区切ります。

2 またhetemlの場合は、SSHのポートが2222なので引数として、-P 2222を渡します。


 

EclipseからSVNサーバーへの接続


1 Eclipseを起動したら、メニューから
ウィンドウ-> ビューの表示-> SVNリポジトリを選択します。


2 SVNリポジトリビューが表示されるので、その上で右クリックし、
新規 -> リポジトリーロケーション と選択します。


3 hetemlでのSVNサーバーの構築での接続と同様にして、接続先に
svn+ssh://[ユーザー名]@[ssh接続のアドレス]/[リポジトリまでの絶対パス]/trunkを指定して、完了ボタンを押します。


4 パスワードが求められるので、SSHへ接続する際のパスワードを入力します。


5 接続に成功すると、リポジトリーロケーションが表示されます。
左の→のところをクリックすると、構成管理しているリソースにアクセスできます。

概要


モバイルプロジェクトでは、mx.controls.Alert(確認ダイアログ)が使用できませんでした。
(Flex 4.5.1)
そこでライブラリとして自作することにしました。
TitleWindowがモバイルでも使えたのでこれベースとして作成。

 


仕様


Alertと挙動を合わせるために、
 
  1. static関数のshow()で表示
  2. ダイアログが閉じたときに、CloseEventをディスパッチ
  3. CloseEvent.detailに、選択結果を格納
 
という仕様にしました。
 
 
ダウンロード


  ・ ライブラリファイル(.swcファイル)
  ・ プロジェクトファイル(.zip)
  ・ ASDoc(APIリファレンス)
 
 
使い方


1. ライブラリファイル(AlertDialog.swc)を、プロジェクトのlibフォルダにおきます



 

2.確認ダイアログを表示したいときに、AlertDialog.show()関数を呼びます。

1
2
3
4
5
6
7
AlertDialog.show(
                   this,
                   "メッセージ",
                   "タイトル",
                   AlertDialog.YES_NO_DIALOG,
                   onCloseAlertDialog
                );

引数として、

  1. ダイアログの親のDisplayObject
  2. 表示するメッセージ
  3. ダイアログのタイトル
  4. ダイアログの種類(デフォルト: YES/NOダイアログ)
  5. ダイアログが閉じたときに呼ばれる関数 (CloseEventのEventListenner, デフォルト: null)

を指定します。

ダイアログの種類 (第4引数)は、

  ・YES/NOダイアログ (AlertDialog.YES_NO_DIALOG)
  ・YES/NO/Cancelダイアログ (AlertDialog.YES_NO_CANCEL_DIALOG)
  ・OKダイアログ (AlertDialog.OK_DIALOG)
  ・OK/CANCELダイアログ (AlertDialog.OK_CANCEL_DIALOG)

から選択できます。

 

3.確認ダイアログが閉じたときに呼ばれる関数(CloseEventのEventListener)を作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/** 3. AlertDialogが閉じたときに呼ばれる関数 */
private function onCloseAlertDialog
                     (event:CloseEvent):void
{
    /* 選択結果 */
    var result:int = event.detail;
               
    if(result == AlertDialog.YES)
    {
        /* yesを選択したとき */     
    }
    else if(result == AlertDialog.NO)
    {
        /* noを選択したとき */
    }
}

CloseEventのdetailに、確認ダイアログでのボタンの押下結果が含まれます。

  ・Yesを選択したときは、AlertDialog.YES
  ・Noを選択したときは、AlertDialog.NO
  ・OKを選択したときは、AlertDialog.OK
  ・Cancelを選択したときは、AlertDialog.Cancel
 
が格納されます。

新規追加と、一部修正



↓ ダウンロード
PSDファイル(.PSD)

アプリ用に作成したメモ帳アイコン。
フリー素材としてアップ。

 


↓ ダウンロード
PSDファイル(.PSD)

既存のFileReferenceだとsdcard以下のファイルしか選択できなかったので
ファイル選択するためのライブラリを作成しました。(以前アプリでつくったものをライブラリ化)

<ファイル>

FileChooser.zip (プロジェクトファイルの一式)
FileChooser.swc (ライブラリファイル)

<使い方>

1. ライブラリファイル(FileChooser.swc)を、プロジェクトのlibフォルダにおきます。

 

2. ファイル選択をしたいときに、FileChooserクラスのインスタンスを生成します。
引数として、現在のViewのインスタンス、最初に表示したいディレクトリのパスを指定します。
次に、作成したインスタンスのshowFileChooser()メソッドを呼び出します。

1
2
3
4
5
/* FileChooser(view, 最初のパス) */
var fc:FileChooser = new FileChooser(view,"/");

/* ファイル選択ビューの表示 */
fc.showFileChooser();

 

3. showFileChooser()を呼び出すと、ビューがファイル選択のビューに切り替わります。

 

4. リストから、ファイルを選択すると元のビューに戻ります。選択したファイルのパスは、
FileChooser.selectedPathに格納されます。

元のビューのViewNavigatorEvent.Activateイベントなどで、拾うとよいかと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * ビューがアクティブになったとき
 *
 * @param event ViewNavigatorEventのインスタンス
 */

private function onActivate
     (event:ViewNavigatorEvent):void
{
    /* ファイルパスがセットされているときは、
        その値をフォームにセットする */

    if(FileChooser.selectedPath != null)
    {
          filePath = FileChooser.selectedPath;
    }
}

※static変数への格納はしたくなかったけど、パスの保持が
どうしてもうまくできなかったのでstatic変数に格納することにしました。

素材は、www.blog.spoongraphics.co.uk
のものを使用させてもらいました。

« Older entries