この投稿は、「 Smart Posts for Smart Posts 」コンテストに参加しています。
現在、多くのモバイルアプリケーションはHTMLとJavascriptを使用して記述されています。 理解しやすい-このようなアプリケーションは記述しやすく、あるモバイルプラットフォームから別のモバイルプラットフォームに簡単に移行でき、Java、Objective-C、その他の言語を学ぶ必要はありません。 ただし、ほとんどのモバイルオペレーティングシステムでは、何らかのラッパーが必要です。 最も単純なケースでは、組み込みWebブラウザーの最大化されたウィンドウとなる小さなアプリケーションを作成する必要があります。 特別な機能(連絡先やファイルの操作など)をサポートするには、必要な機能をサポートするために追加するか、 モバイルアプリケーションを作成するためのフレームワークのいずれかを使用する必要があります 。 いずれにせよ、コンパイラであれ同じフレームワークであれ、特別なツールが必要です。
ただし、Symbian S60 3rd Edition以降のSymbianには、Symbian Web Runtime(WRT)があります。 ほとんどすべてのデスクトップOSの標準ツール(テキストエディターとZIPアーカイバー)のみを使用して、HTMLおよびJavascriptを使用してモバイルアプリケーションを開発できます。 実際、これはモバイルフレームワークでもありますが、既にシステムに組み込まれているため、追加のツールやコンパイルは必要ありません。 それを詳しく見てみましょうか?
こんにちは世界!
最初のレビューでの将来のWRTアプリケーション(またはWRTウィジェット)は、拡張子が.WGZのZIPアーカイブです。 ファイルを含むフォルダーが含まれています(ファイルをアーカイブするだけの場合は、フォルダー内でのみ機能します)。 内部には、info.plistファイルとメインのHTMLファイルが必要です。 推奨サイズが88x88ピクセルのicon.pngファイルもあります。これは、ウィジェットのアイコンとして機能します。 他のすべてはあなた次第です。
info.plistファイル形式は、Appleの形式とほぼ同じであり、 ここで説明します 。 以下に例を示します。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Nokia//DTD PLIST 1.0//EN" "http://www.nokia.com/NOKIA_COM_1/DTDs/plist-1.0.dtd"> <plist version="1.0"> <dict> <key>DisplayName</key> <string>HelloWorld</string> <key>Identifier</key> <string>com.HelloWorld</string> <key>Version</key> <string>1.0</string> <key>MainHTML</key> <string>index.html</string> <key>MiniViewEnabled</key> <false/> <key>AllowNetworkAccess</key> <false/> </dict> </plist>
パラメータ | 種類 | 使用する | 説明 |
表示名 | ひも | 必須 | ウィジェットの名前。 電話のメインメニューに表示されます。 |
識別子 | ひも | 必須 | ウィジェットの一意の識別子。 |
MainHTML | ひも | 必須 | メインHTMLファイルへの相対パス。 |
バージョン | ひも | オプショナル | ウィジェットのバージョン。 |
AllowNetworkAccess | ブール値 | オプショナル | ウィジェットにネットワークへのアクセスを許可します。 デフォルトではfalse-ローカルデータのみにアクセスします。 |
MiniViewEnabled | ブール値 | オプショナル | ウィジェットをデスクトップに追加する機能を提供します。 デフォルトはfalseです。 デバイスがデスクトップウィジェットをサポートしていない場合、このパラメーターは無視されます。 |
同じフォルダーにindex.htmlファイルを作成する場合、次のように記述します。
<html> <body> <h1>Hello, world!</h1> </body> </html>
そして、このフォルダーをZIPアーカイブに圧縮し、その許可を.WGZに変更すると、Symbian用のアプリケーションが既に取得されます。
それがすべてです。 ページを作成し、それらのJavascriptコードを記述し、ブラウザーでテストし、Symbianのモバイルアプリケーションに簡単かつ簡単に変換できます。 ただし、インターネットからCSSファイルとJavascriptファイルを接続するには、AllowNetworkAccessパラメーターを有効にする必要があります。
ローカリゼーション
ウィジェットを多くの言語に翻訳したい場合は、組み込みのローカライズツールが役立ちます。 とても簡単です。
任意の言語をサポートするには、メインフォルダー内に<language> .lprojという名前のサブフォルダーを作成する必要があります(たとえば、「en.lproj」または「fi.lproj」)。
ウィジェットの名前を翻訳する場合は、infoplist.stringsファイルを作成し、次のような行をその中に入れる必要があります。
DisplayName = " "
それ以外の場合、ローカライズプロセスは非常に簡単です。 カスケードスタイルシート、スクリプト、画像、またはその他のリソースを含むファイルをダウンロードする場合、WRTは最初にローカライズされたサブフォルダーで検索し、次にメインフォルダーで検索します。 例:
[メインフォルダー] \ fi.lproj \ flag.png
[メインフォルダー] \ en.lproj \ flag.png
[メインフォルダー] \ flag.png
Javascript
var flag = document.createElement('img'); flag.setAttribute('src', 'flag.png');
その結果、フィンランド語の場合、フィンランド語のフラグが表示されます。英語の場合-英語、その他の場合-紫色です。
WebランタイムAPI
WRT APIについても言及する必要があります。 Symbianと対話することができます。 WRT 1.0にはほとんど機能がありませんが、WRT 1.1以降では、このモバイルOSの多くのサービスを操作できます。 サービスの操作については、以下を参照してください。 完全なドキュメントは、公式ドキュメントのSymbian Web Runtime APIリファレンスページにあります。 以下に、このドキュメントの一部を簡単に翻訳します。 ドキュメントのいくつかのポイントは、単に説明されていないか、物議をかもしていません。そのため、間違いに気付いたら、それについて書いてください。修正します。
Javascriptからアクセスできるいくつかの特別なWRTオブジェクトがあります。
- ウィジェット -WRTの基本機能。
- menu-アプリケーションメニューを操作します。
- MenuItem-メニュー項目を作成するためのクラス。
- デバイス -Symbianサービスで動作します。 WRT 1.1に登場しました。
さらに、 画面オブジェクトがサポートされているため、デバイスの画面設定を取得できます。
それらを一つずつ見てみましょう。
ウィジェット
window.widgetまたはウィジェットとしてのみ使用できます。 同時に、単語widgetはWRTで予約されているため、変数または関数の名前として使用しないでください。
ウィジェットメソッドのリスト:
- openURL (String url )-組み込みのブラウザーでURLアドレスを開きます。 同時に、ウィジェットは閉じませんが、バックグラウンドで動作し続けます。 URLアドレスはRFC 1738に従う必要があり、すべての非ASCII文字(ロシア文字など)は事前にコーディングする必要があります。
- setDisplayLandscape ()-デバイスでサポートされている場合、向きを横に変更します。
- setDisplayPortrait ()-デバイスでサポートされている場合、向きを縦に変更します。
- setPreferenceForKey (String preference 、String key )-組み込みストレージにキーと値のペアを保存します。 キー -キー、 設定 -値。 ストレージからペアを削除するには、値としてnullを渡します。
- preferenceForKey (String key )-組み込みストレージからキーと値のペアの値を取得します。 キー -キー。 ペアが存在しない場合、undefinedを返します。
- prepareForTransition (String transitionMode )-アニメーションの準備。 transitionMode-ビューアニメーション。これまでは「フェード」のみをサポートしています。
- performTransition ()-アニメーションを実行します。
- setNavigationEnabled (ブールnavigationMode )-要素間のナビゲーションモードを設定します。 navigationModeが trueに設定されている場合、ナビゲーションはカーソルを使用して行われます。 falseの場合、アイテム間の移動を使用します。 デフォルトでは、カーソルがtrueになっています。
- setNavigationEnabled (String navigationMode )-要素間のナビゲーションモードを設定します。 navigationModeが 「none」に設定されている場合、ナビゲーションはカーソルを使用して行われます。 「タブ付き」の場合-アイテム間を移動します。 デフォルトでは、カーソルに「なし」が付いています。
- openApplication (HexNumber Uid 、String param ) -Uidコードとparamパラメーターでアプリケーションを開きます。 アプリケーションコードのリスト:
- 0x10008D39 -Webブラウザー
- 0x100058C5-メッセージ
- 0x101f4cce-連絡先
- 0x101f4cd5-ログ(最近の通話とSMSのリスト)
- 0x100058F8-プロファイル
- 0x10005901-カレンダー
- 0x10005903-時計
- 0x100058CA-録音
- 0x101F4668-単位コンバーター
- 0x10005902-計算機
- 0x1000599d-ノート
- 0x101f84eb-ファイルマネージャー
- 0x101f8599-ギャラリー
- 0x101f857a-カメラ(1台のカメラを持つデバイス上)
- 0x101ffa86-カメラ(2台のカメラを持つデバイス上)
- 0x102072c3-プレーヤー
- 0x10005a3e -RealPlayer
- 0x10005951 -Bluetooth
- 0x1000594d-赤外線
- 0x100058ec-設定
- 0x10005a32-テーマ
prepareForTransitionおよびperformTransition関数の本質を説明しましょう。 ある要素を非表示または表示したいとします。 これを行うには、elem.style.display = "block"またはelem.style.display = "none"を使用します。 ただし、この表示または非表示をアニメーション化する場合は、その前にwidget.prepareForTransition(「フェード」)を呼び出し、その後にwidget.performTransition()を呼び出す必要があります。
ドキュメントの例を次に示します。
HTML
<!-- --> <div id='main'> , ! <input type="button" value="Config" onclick="toMain(0);" /> </div> <!-- --> <!-- --> <div id='config'> , ! <input type="button" value="Main" onclick="toMain(1);" /> </div> <!-- -->
Javascript
function toMain(main) { // widget.prepareForTransition("fade"); if (main) { // // document.getElementById("config").style.display = 'none'; // document.getElementById("main").style.display = 'block'; } else { // // document.getElementById("main").style.display = 'none'; // document.getElementById("config").style.display = 'block'; } // widget.performTransition(); }
ウィジェットオブジェクトプロパティのリスト:
- identifier -info.plistファイルで宣言されたウィジェット識別子。
- onshow-ウィジェット表示イベントハンドラー。 ウィジェットがバックグラウンドからアクティブ状態に移行するときに呼び出されます。
- onhide-ウィジェット非表示イベントハンドラー。 ウィジェットがバックグラウンド状態になったときに呼び出されます。
- onexit-ウィジェットクローズイベントハンドラー。 ウィジェットが閉じられたときに呼び出されます。
- isrotationsupported-デバイスがポートレートモードとランドスケープモードの切り替えをサポートしている場合、このプロパティはtrueに設定されます。 デバイスが1つのモードのみをサポートする場合、false。 widget.setDisplayLandscape()およびwidget.setDisplayPortrait()を呼び出す前に、このプロパティの値を確認する必要があります。
ウィジェットのサブオブジェクト:
- wrt-デバイスとWRTのバージョンに関する情報が含まれます。
- version -WRTのバージョン。 Browser / WRT 7.0を使用するデバイスでは、「1.1」が含まれます。 Browser / WRT 7.1を搭載したデバイスでは、ブラウザーバージョンが含まれます(たとえば、「BrowserNG / 7.1.13841」)。
- platform.id -OSコード(たとえば、「S60」)。
- platform.romVersion-ファームウェアバージョン(たとえば、「v 31.0.008 24-8-2009 RM-365©NMP」)。
- platform.manufacturerは製造元の名前です(たとえば、「Nokia」)。
- platform.packageVersion-ブラウザ/ WRTのバージョン。 ブラウザ/ WRTを搭載したデバイスでは「7.00(0)」になり、ブラウザ/ WRT 7.1を搭載したデバイスでは「7.01(0)」になります。
- platform.model-デバイスモデル(「N97」など)。
メニュー
window.menuまたは単なるメニューとして使用できます。 この場合、ワードメニューはWRTで予約されているため、変数または関数の名前として使用しないでください。
このオブジェクトを使用して、アプリケーションメニューを制御できます。 メニューは左側のソフトボタンに割り当てられ、他の(たとえば右側)に再割り当てすることはできません。 左ボタンは「オプション」と呼ばれます(または別の方法でローカライズされています)。 右のソフトボタンは「終了」と呼ばれ、アプリケーションを終了します。 デフォルトでは、ソフトボタンは非表示になり、ユーザーがボタンのいずれかを押すと(デバイスのキーボードで)表示されます。
メニューオブジェクトのメソッドのリスト:
- append (MenuItem menuItem ) -menuItemをメニューに追加します。
- remove (MenuItem menuItem )-メニューからmenuItemアイテムを削除します。
- getMenuItemById (整数id ) -idコードでMenuItemオブジェクトを取得します。 これがない場合、undefinedが返されます。
- getMenuItemByName (String menuItemLabel ) -menuItemLabelという名前のMenuItemオブジェクトを取得します。 これがない場合、undefinedが返されます。 2つのアイテムの名前が同じ場合、ドキュメントには記載されていませんが、最初に見つかったものが返される可能性が高くなります。
- setLeftSoftkeyLabel (String label 、Function callbackfunc )-左ソフトボタンの名前を設定します。 titleが空の文字列の場合、デフォルト値が設定されます(ローカライズに応じて「オプション」など)。 callbackfunc-ボタンが押されたときに呼び出される関数(デフォルトでは、メニューが表示されます)。 nullがcallbackfuncに渡された場合、デフォルト関数をボタンに返します。
- setRightSoftkeyLabel (String label 、Function callbackfunc )-右ソフトボタンの名前を設定します。 titleが空の文字列の場合、デフォルト値が設定されます(ローカライズに応じて「終了」またはその他)。 callbackfunc-ボタンがクリックされたときに呼び出される関数(デフォルトでは、アプリケーションの終了)。 nullがcallbackfuncに渡された場合、デフォルト関数をボタンに返します。
- showSoftkeys ()-ソフトボタンを表示します。
- hideSoftkeys ()-ソフトボタンを非表示にします。
- clear ()-メニューをクリアします。
メニューオブジェクトのプロパティのリスト:
- onShow-メニュー表示イベントのハンドラー。 メニューが表示されるときに呼び出されます。
MenuItem
メニュー項目。
MenuItemオブジェクトのメソッドのリスト:
- new MenuItem (String label 、Integer id )-コンストラクター。 名前ラベルとIDコードを使用して、MenuItemの新しい段落インスタンスを作成します。
- append (MenuItem childMenuItem ) -childMenuItemアイテムをサブメニューに追加します。
- remove (MenuItem childMenuItem )-サブメニューから項目childMenuItemを削除します。
- setDimmed (ブールフラグ )-メニュー項目を表示するかどうかを設定します。 falseの場合、メニュー項目は表示されません。 trueの場合、メニュー項目が表示されます。 デフォルトではtrue-表示。
MenuItemオブジェクトのプロパティのリスト:
- onSelect-メニュー項目を選択するためのイベントハンドラー。 メニュー項目が選択されたときに呼び出されます。 整数ID-選択したメニュー項目のコードをハンドラー関数に渡すこともできます。
ドキュメントの例:
// function menuEventHandler(id) { switch (id) { case 2001: break; case 2002: // - break; } } // function createMenu() { // var optionsMenu = window.menu; // - optionsMenu.onShow = function() { // alert('Event Trigger: optionsMenu.onShow'); } // var m1 = new MenuItem('', 2001); var m2 = new MenuItem('', 2002); // - m1.onSelect = menuEventHandler; m2.onSelect = menuEventHandler; // optionsMenu.append(m1); optionsMenu.append(m2); // var m11 = new MenuItem('', 3001); var m12 = new MenuItem('', 3002); // "" // id optionsMenu.getMenuItemById(2001).append(m11); // optionsMenu.getMenuItemByName('').append(m12); // - m11.onSelect = menuEventHandler; m12.onSelect = menuEventHandler; }
装置
window.deviceまたは単にデバイスとして使用可能。 この場合、ワードデバイスはWRTで予約されているため、変数または関数の名前として使用しないでください。
このオブジェクトはWRT 1.1以降存在しており、1つの機能だけでSymbianサービスを操作する大きな機会を開きます。
デバイスオブジェクトのメソッドのリスト:
- getServiceObject (文字列プロバイダー 、文字列インターフェイス )-プロバイダープロバイダーからインターフェイスインターフェイスでサービスオブジェクトを受信します 。
サービス プロバイダー インターフェース AppManager (アプリケーションサービス) Service.AppManager IAppManager カレンダー (カレンダーサービス) Service.Calendar IDataSource 連絡先 (連絡先サービス) サービス。 IDataSource ランドマーク (ウェイポイントサービス) Service.Landmarks IDataSource ロケーション (ジオロケーションサービス) サービス場所 ILocation ロギング Service.Logging IDataSource メディア管理 (メディア管理サービス) Service.MediaManagement IDataSource メッセージング ( メッセージングサービス) Service.Messaging メッセージング センサー (センサーサービス) Service.Sensor ISensor システム情報 Service.SysInfo ISysInfo
デバイスでサービスが利用できない場合、メソッドは未定義を返し、例外をスローします。 サービスに最初にアクセスしようとすると、サービスを使用する権利について尋ねるダイアログボックスが表示されます(「アプリケーションはアクセスを許可しています...許可しますか?」)。
- getServicePermissions (Array serviceArray )-サービスを操作するためのユーザー許可のリクエスト。 サービスとインターフェイスのリストは、{"provider": "interface"、 "provider": "interface"、...}の形式でスクランブルされます。 1つのダイアログボックスでユーザーからサービスを使用する許可を取得するために使用されます。 使用はオプションですが、望ましいです。 値を返しませんが、エラー時に例外をスローします。
WRT自体でのSymbianサービスの使用に関するセクションは非常に大きいため、ここでは説明しません。 これがおもしろければ、別の記事で説明できます。 一般的に、ドキュメントは多かれ少なかれ明確であり、各サービスについてすべての機能の詳細な例があります。 ところで、ほとんどの関数には同期オプションと非同期オプションがあるため、アプリケーションの速度は低下しません。
長所と短所
長所:
- 開発の容易さ;
- 手元にあるデバイスなしで開発する機能(エミュレーターまたはWebブラウザー内);
- 多くのSymbianサービスを使用する機能。
- ドキュメントとサンプルの入手可能性;
- 残念ながら、ほとんどのデバイスはかなり古いバージョンのWebKitを使用していますが、これはHTML 5とCSS 3をサポートしていません。
- また、一部のデバイスではWRT 1.0がまだ使用されていますが、その機能は非常に小さくなっています。
- ドキュメントは場所によって混乱し、矛盾しています;ロシア語の翻訳はありません。
ちなみに、Nokia Browser 8.5ブラウザーを搭載したMeeGo OSに基づく同じNokia N9とNokia N950では、HTML 5 が完全にサポートされています。たとえば、ジェスチャーと加速度計をサポートするCanvasを使用してゲームを作成できます。 確かに、WRTは既に使用されていませんが、HTML 5の機能は使用されています。
読んでくれてありがとう。 エラーの可能性をおaびします。有益なコメントをお待ちしております。