Nie masz konta? Zarejestruj
Zapomniałeś hasła? Przypomnij
Strona 1 z 1 |
[ Posty: 2 ] |
Dołączył(a): 2010-06-18, 23:11
Online: 57d 23h 13m Posty: 1925 Lokalizacja: Polska? Podziękowań: 230 Podziękował: 12 Model: Wave&WaveM |
Napisane: 2012-05-21, 20:45
[code]Autor: wit Źródło: http://www.badadev.com/anatomy-of-hello-world-the-bada-way/ Tłumaczenie na podstawie Google Translatora, więc z góry przepraszam za błędy.[/code] Każde środowisko potrzebuje aplikacji "Hello World!", która ma zobrazować jego działanie. Nie inaczej jest w wypadku platformy bada. Pierwszą rzeczą jaką musisz znać jest język programistyczny C++. Podany tu przykładowy kod został opracowany w Visual Studio 2005 i kreatorze bada, a przetestowany został w symulatorze bada. Stworzone zostaną następujące pliki: [list] * HelloWorld.h * HelloWorld.cpp * HelloWorldEntry.cpp [/list:u] Istnieją również dwa pliki XML, które będą potrzebne do projektu o nazwie application.xml i manifest.xml, ale o nich nie będziemy mówić. Na początek zajmiemy się główną klasą aplikacji. Zacznijmy od jej nagłówka [b]HelloWorld.h[/b] [code]#ifndef __HELLOWORLD_H__ #define __HELLOWORLD_H__ #include <FBase.h> #include <FGraphics.h>; #include <FLocales.h> #include <FSystem.h> #include <FApp.h> using namespace Osp::Base; using namespace Osp::Graphics; using namespace Osp::Locales; using namespace Osp::System; using namespace Osp::App; class HelloWorld : public Application // must inherit from Application class { public: // The application must have a factory method that creates an instance of the application. static Application* CreateInstance(void); public: HelloWorld(); ~HelloWorld(); public: // The application must provide its name. String GetAppName(void) const; protected: // The application must provide its ID. AppId GetAppId(void) const; AppSecret GetAppSecret(void) const; public: // This method is called when the application is initializing. bool OnAppInitializing(AppRegistry& appRegistry); // This method is called when the application is terminating. bool OnAppTerminating(AppRegistry& appRegistry); // Thie method is called when the application is brought to the foreground void OnForeground(void); // This method is called when the application is sent to the background. void OnBackground(void); // This method is called when the application has little available memory. void OnLowMemory(void); // This method is called when the device's battery level changes. void OnBatteryLevelChanged(BatteryLevel batteryLevel); }; #endif[/code] Większość rzeczy w tym pliku nagłówkowym powinny być zrozumiałe, zwłaszcza dla tych z nas, którzy pracują często z C++. Jest kilka rzeczy, na które warto zwrócić uwagę: [list] # Base - podstawowe funkcje i interfejs (w szczególności poszczególnych typów danych) # Graphics – pozwala "rysować" na ekranie (pamiętaj, że to zwykły rysunek na niskim poziomie działaĂą - funkcje User Interface są w innym pakiecie o nazwie Osp:: UI) # Locales – funkcje związane z kulturą /informacjami (np. za prawidłowe daty, waluty i formaty liczb) # System – podstawowe interakcje systemu (np. alarmy, poziom baterii itp.) # App – pozwala na zarządzanie własną aplikację i jej ustawieniami, a także zakładania i wprowadzenia innych aplikacji [/list:u] Klasa aplikacji musi dziedziczyć z klasy Application zdefiniowaną w Osp:: nazwę aplikacji. Ten zakłada również, że twoja klasa musi implementować niektóre funkcje, takie jak: [list] # Statyczna funkcja, która zwraca instancje klasy aplikacji # Konstruktor i destruktor funkcji # Informacje o niektórych podstawowych funkcjach, które zwracają nazwy, id lub tajny kod swojego app # Niektóre obowiązkowe obsługi zdarzeĂą, które są wywoływane na ważne wydarzenia, takie jak zmiany poziomu baterii. [/list:u] Jest to minimalny szkielet każdej aplikacji, który można rozwijać. [b]HelloWorld.cpp[/b] [code]#include "HelloWorld1.h" HelloWorld1::HelloWorld() { } HelloWorld1::~HelloWorld() { } Application* HelloWorld::CreateInstance(void) { // You can create the instance through another constructor. return new HelloWorld(); } String HelloWorld::GetAppName(void) const { static String appName(L"HelloWorld"); return appName; } AppId HelloWorld::GetAppId(void) const { static AppId appId(L"93bt1p123e"); return appId; } AppSecret HelloWorld::GetAppSecret(void) const { static AppSecret appSecret(L"9C645DDBA19C71BAD1204DA4DAA7A0B9"); return appSecret; } bool HelloWorld::OnAppInitializing(AppRegistry& appRegistry) { // TODO: // Initialization including UI construction can be done here. // Load the application's latest data, if necessary. // If this method is successful, return true; otherwise, return false. return true; } bool HelloWorld::OnAppTerminating(AppRegistry& appRegistry) { // TODO: // Deallocate or close any resources still alive. // Save the application's current states, if applicable. // If this method is successful, return true; otherwise, return false. return true; } void HelloWorld::OnForeground(void) { result r = E_SUCCESS; Canvas* pCanvas = GetAppFrame()->GetCanvasN(); if(pCanvas == null) return; Font* pFont = new Font(); pFont->Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50); pCanvas->SetFont(*pFont); r = pCanvas->DrawText(Point(30, 30), GetAppName()); if (IsFailed(r)) { AppLog("pCanvas->DrawText() failed.\n"); delete pCanvas; return; } r = pCanvas->Show(); if (IsFailed(r)) { AppLog("pCanvas->Show() failed.\n"); delete pCanvas; return; } delete pCanvas; } void HelloWorld::OnBackground(void) { } void HelloWorld::OnLowMemory(void) { // TODO: // Deallocate as many resources as possible. } void HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel) { // TODO: // It is recommended that the application save its data, // and terminate itself if the application consumes much battery }[/code] Nie trzeba tu chyba nic wyjaśniać. Wreszcie punkt wejścia do aplikacji (np. [i]main (...)[/i]). Odbywa się to w oddzielnym pliku: [b]HelloWorldEntry.cpp[/b] [code]/** * OSP Application entry point(OspMain) introduced. */ #include <fapp.h> #include "HelloWorld.h" using namespace Osp::Base::Collection; extern "C" { __declspec(dllexport) void OspMain(int hInstance, int argc, char *argv[]); } /** * Entry function of OSP Application which is called by the operating system. */ extern "C" { void OspMain(int hInstance, int argc, char *argv[]) { AppLog("OspMain() Started. \n"); result r = E_SUCCESS; ArrayList* pArgs = new ArrayList(); pArgs->Construct(); for (int i = 0; i < argc; i++) { String* pEachArg = new String(argv[i]); pArgs->Add(*pEachArg); } r = Osp::App::Application::Execute(HelloWorld::CreateInstance, pArgs); if (IsFailed(r)) { AppLog("Application execution has failed.\n"); } if (pArgs) { pArgs->RemoveAll(true); delete pArgs; } AppLog("OspMain() Ended. \n"); } }[/code] [b]OspMain ()[/b], która jest głównym punktem wejścia w bada OS, "jest widoczne" dzięki [b]__declspec(dllexport) [/b]. Drugą ciekawą sprawą są argumenty przekazania do programu. Podejrzewam, że można przekazać pewne dane tutaj, jeśli uruchomiona aplikacja w innym app. argumenty te są przechowywane w ArrayList, jednym z typów danych w bada, określonym w Osp:: namespace Base. |
|||
|
Dołączył(a): 2010-08-08, 10:05
Online: 24d 6h 35m Posty: 448 Podziękowań: 51 Podziękował: 63 Model: wave s8500 Firmware: bada 2.0 Operator: play |
Napisane: 2012-06-22, 09:49
Przyznam się szczerze że gość strasznie namieszał i skomplikował sprawę. Prościej jest używać dedykowanego środowiska Eclipse. Do tego zbagatelizował plik manifest.xml, który jest bardzo ważnym plikiem do działania aplikacji. Do tego dodaje pliki nagłówkowe, z których nie korzysta. _________________ [url=http://goo.gl/AZyEE][img]http://senega.strefa.pl/ic_kropka_tv.png[/img] Kropka TV - program telewizyjny na system Android[/url] |
|||
|