2009-03-18

Java : iアプリで着信履歴を取得したい


iアプリで着信履歴を取得したい。



Q. iアプリで着信履歴を取ってこれるか?

A.
DoJa-3.0 から発着信履歴が取ってこれるようなことができるらしい。
-> DoJa-3.x プロファイルについて - Q. トラステッドiアプリ(iアプリDX)ではどのようなことが可能になりますか? を参照


Q. トラステッドiアプリ(iアプリDX)って?

A.
iモードメニューからじゃないと配信できないアプリっぽい?
-> 「iMenu」の「メニューリスト」でコンテンツ提供の申し込みは NTT DOCOMO IP申込 から



Q. まぁ、発着信履歴ってどうやって取得するの?

A.
※ API:DoJa-5.xプロファイル向けiアプリに関する技術資料 - iアプリコンテンツ開発ガイド for DoJa-5.0 APIリファレンス編

com.nttdocomo.system.CallRecord

携帯電話のネイティブの音声発着信履歴機能にアクセスする手段を提供します。

音声発着信履歴データの取得機能を提供します。 getLastRecordメソッドを実行することにより、 端末に保存されている最新の音声発着信履歴を取得することができます。 取得されたエントリには、 相手の電話番号(XString)、 相手の電話番号が登録されている電話帳エントリのID、 日時(XStringとして取得可能)、 接続が成功したか否かの情報、 発着信の種別 が設定されています。

com.nttdocomo.system.CallRecord#getLastRecord

public static CallRecord getLastRecord(int type)

発着信履歴の最新のエントリを取得します。 最後の発着信ではなく、発着信履歴に残っている最新のエントリを返します。

取得されたエントリには、 相手の電話番号(XString)、 相手の電話番号が登録されている電話帳エントリのID、 日時(XStringとして取得可能)、 接続が成功したか否かの情報、 発着信の種別が設定されています。

ただし、発信履歴の場合、 日時、接続が成功したか否かの情報、 ならびに発信の種別が設定されているかどうかは機種依存です。

パーミッションとして携帯電話情報の参照が許可されている トラステッドiアプリのみこのメソッドを呼び出すことができます。



... 最新の 1 件しか取ってこれないじゃないか!?




先ずは、実装して動かしてるか ... 。




※ 開発環境:DoJa-5.0 + J2SE1.4.2_18 + NetBeans4.1
※ 実行環境:DoJa-5.0プロファイル向けiアプリ開発ツール(iαppli Development Kit for DoJa-5.0)


下記で、プロジェクトの構築で dx.jar と dx.jam を生成

Sample.java
package dx;

public class Sample extends IApplication {

public void start() {
    Display.setCurrent(new SamplePanel());
}

/*
 * 最新の着信履歴を取得し、画面上に電話番号を表示する
 */
class SamplePanel extends Panel {
    public SamplePanel() {
        try {
            CallRecord record = CallRecord.getLastRecord(CallRecord.CALL_IN);
            XString number = new XString("");
            if (record == null) {
                number = new XString("not history.");
            } else {
                number = record.getPhoneNumber();
            }
            this.add(new Label(number));
        } catch (Throwable e) {
            this.add(new Label("internal error."));
        }

    }
}
}

ADF 設定(NetBeans4.1 -> メニュー -> (プロジェクトを選択して)DoJa-5.0 -> ADF/トラステッド動作設定)
AppName = Sample
AppClass = dx.Sample

※ 設定項目のみ記述


エミュレータで実行
SecurityViolation: x getLastRecord 0


セキュリティ違反!?


トラステッドiアプリ(iアプリDX)では TrustedAPID の設定をしないといけないらしい。
なので、TrustedAPID の項目に適当に数字 11 桁を設定してみる。

ADF 設定(NetBeans4.1 -> メニュー -> (プロジェクトを選択して)DoJa-5.0 -> ADF/トラステッド動作設定)
TrustedAPID = 12345678901

※ 設定項目のみ記述
※ 構築後に生成される dx.jam を直接書き換えてもいいんじゃないかとか



で、プロジェクトを再構築、エミュレータで実行してみる。
うごいたうごいた。



次は、適当にサーバを用意してそこから実機でダウンロード

download.html
<HTML>
 <HEAD>
   <TITLE>download</TITLE>
 </HEAD>
 <BODY>
   <OBJECT declare id="dx" data="dx.jam" type="application/x-jam"></OBJECT><BR>
   <A ijam="#dx" href="no.html">DOWNLOAD</A>
 </BODY>
</HTML>

no.html
<HTML>
 <HEAD>
   <TITLE>error</TITLE>
 </HEAD>
 <BODY>
   iアプリをダウンロードできません。<br>
 </BODY>
</HTML>



実機での実行結果
「ソフトに誤りがあるため、ダウンロードできません」




NTT docomo から TrustedAPID をもらわないとどうにもならないね。



参考
iアプリ
iアプリ | サービス・機能 | NTTドコモ
TrustedAPID
TrustedAPIDに関する推察 - 試行錯誤と創意工夫(S!アプリ開発日記+α)

0 件のコメント:

コメントを投稿