« Z22のカレンダー同期できない | トップページ | Gmailアプリにチャレンジ »

2008年5月16日 (金)

新作アプリ(白状)

最近、ブログの更新が滞り気味です。

こういうときは、仕事がやたら忙しいか、更新ネタが無いか、アプリを作っているかのどれかなのですが、今回はアプリを作っています。以前もちょっと触れたことがありますが、私にしては珍しく実用系のアプリです。と言っても、他の人にはあまり役に立たないかもしれません。

アプリの内容は、公開するまでは伏せておこうと思ったのですが、潜行して長い間経つのと、ちょっと行き詰まってしまったので少しだけ白状してしまいます。

実はそのアプリは、アラーム機能を使います。で、この実装でこの間から四苦八苦していています。どんな内容かというと、、、

Palm OSでは、アラーム機能とアラート機能というのがあります。アラーム機能というのはOS3.x以前から実装されている機能で、アラート機能というのはOS4.0から追加された機能だそうです。私自身ももう一つ違いがよく分かっていないのですが、アラーム機能の方は、アラームを発生させる時刻とかをシステムに渡しておくと、その時刻にアラームを鳴らしてくれたりする機能で、アラート機能の方は、アラーム機能から呼び出されてユーザーとのインターフェースや一元管理をするための機能、といった感じでしょうか。

私が作ろうとしているアプリでは、アラーム機能だけあれば良さそうなので、まずその実装に取り組みました。System APIを呼び出す方法もあるようなのですが、NS Basicでは直接アラーム機能を使うのは難しいらしく、代わりにNSBAlarmProxy.prcというプロクシプログラムが用意されていて、これを使うことでわりと簡単に「所定時刻にアラームを鳴らす」ということが出来ます。

ところが、このアラーム機能というのは、先ほども言ったようにOS3.x以前からある機能なので機能的には非常にあっさりしていて、LEDを点滅させたりバイブレータを動かしたり、ということは出来ません。

で、バイブレータを動かそうとすると2つの方法があるようです。一つはNS Basicのライブラリ(NSBTreoLib)を使って、バイブレータを動かすアプリケーションを作っておき、アラーム時刻が来たときにこのバイブレーションプログラムを呼び出す方法。もう一つは、先ほどのアラート機能を使う方法です。アラート機能はOS4以降にサポートされた機能なので、バイブレータをサポートしています。アラーム時刻が来たときに、所定のパラメータを設定してアラート機能を呼び出せば、バイブレータを動かしてくれるようです。

まずは第1の方法で実装を始めました。それなりにうまく動いたのですが、一つ難点が。Palmにキーガードを設定してると、電源ボタンを押した後、一定の時間以内に5wayのセンターボタンを押さないと再び電源が切れてしまいますが、これに引っかかってしまうのです。電源offの状態でアラーム時刻が来た場合、アプリケーションはバイブレータを動かすのですが、キーガードの時間が3秒に設定されていると、3秒でバイブレータもoffになってしまうのです。これではアラームに気づかないことも多そう。

ちなみに、Centroに標準で入っているWorld Clockというアプリでアラームを設定すると、キーガードが設定されていてもちゃんとボタンを押すまでバイブレータを動かし続けてくれます。見ると、このアプリはアラート機能のバイブレータを使っている様子。

それならば、と今度はアラート機能にチャレンジ。この機能はライブラリでは提供されていないので、APIをコールする必要があります。自分でAPIを使うアプリを作るのは初めて。ここここ、そしてここなんかを色々見ながら見よう見まねで実装してみるのですが、なぜかコンパイルするとシンタックスエラー。よくよく調べると、NSBasicのAPIコール関数(SysTrapFunc)は、渡せるパラメータが5個までなのだそうです。そして、アラート機能を呼ぶための関数、AttnGetAttention関数のパラメータは8個(泣

というわけで、すっかり行き詰まってしまった今日この頃です。。。

|

« Z22のカレンダー同期できない | トップページ | Gmailアプリにチャレンジ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/140067/41226568

この記事へのトラックバック一覧です: 新作アプリ(白状):

« Z22のカレンダー同期できない | トップページ | Gmailアプリにチャレンジ »