--------------------------------------------------------------------------- Android intent와 유사하게 Tizen에서 다른 app을 실행하거나
처리결과를 받을 수 있도록 한 방법
app id나 app에 등록된 operation을 지정해서 실행 할 수 있음.
실행되는 app에서는 실행되고 있지 않을 경우 실행되면서 event를 받거나
실행중이면 바로 받게 된다.
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.appprogramming/html/guide/app/app_controls.htm
AppControl class
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.apireference/classTizen_1_1App_1_1AppControl.html
[App 등록]
타 app이 사용할 실행을위한 operation을 등록하는 방법
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.appprogramming/html/guide/app/exporting_appcontrol_functionality.htm
Application manifest에서
<Apps> -> <UiApp> -> <AppControls> -> <AppControl> -> <Operation> 을 등록
<AppControls> <AppControl> <Operation>http://tizen.org/appcontrol/operation/view</Operation> <Uri>custom</Uri> </AppControl> <AppControl> <Operation>http://tizen.org/appcontrol/operation/view</Operation> <MimeType>image/jpeg</MimeType> </AppControl> </AppControls>
event listener 등록
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.appprogramming/html/guide/app/handling_appcontrol_request.htm
Tizen::App::IAppControlProviderEventListener 구현 후 OnAppInitializing()에서 등록
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.apireference/classTizen_1_1App_1_1IAppControlProviderEventListener.html
* app이 실행될 때 마다 OnAppControlRequestReceived()가 계속 호출 된다. 호출 시 전달되는 argument들의 null check로 처리 해야 함.
* 위 그림에서 나와 있듯이 OnAppControlRequestReceived는 실행 시 app이 initialize되는 중에 실행 중에 호출 될 수 있음.
. 시작 시 UiApp을 상속받은 class에서 event가 발생한다면 data를 저장해 두었다가 나중에 Form에서 처리하게 하던가 아니면 실행중이라면 바로 listener에서 처리하게 해야 할듯 하다.
[app 호출]
app ID로 launch 하는 방법
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.apireference/classTizen_1_1App_1_1AppManager.html#ab0bb90797d2d13d718929acbb794eb26
* AppManager::FindAppControlN으로 하려고 했는데 appid로 application을 찾지 못하는 현상이 발생한다.. 뭐가 잘못이지?
operation id로 find and start 하는 방법
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.apireference/classTizen_1_1App_1_1AppControl.html
using namespace Tizen::App; void MyAppClass::AppControlDialSample(void) { String telUri = L"tel:12345678900"; AppControl* pAc = AppManager::FindAppControlN(L"tizen.phone", L"http://tizen.org/appcontrol/operation/dial"); if(pAc) { pAc->Start(&telUri, null, null, null); delete pAc; } }
: https://developer.tizen.org/dev-guide/2.2.0/org.tizen.native.appprogramming/html/guide/app/delivering_launch_arguments.htm
FindAndStart (const Tizen::Base::String &operationId, const Tizen::Base::String *pUriPattern, const Tizen::Base::String *pDataType, const Tizen::Base::String*pCategory, const Tizen::Base::Collection::IMap *pExtraData, IAppControlResponseListener *pListener)
// Sharing single content String fileUri = L"file:///opt/usr/media/Images/share.jpg"; AppControl::FindAndStart(L"http://tizen.org/appcontrol/operation/share", &fileUri, null, null, null, null);
AppControl status나 호출된 app으로 부터 response를 받고 싶다면 IAppControlResponseListener 를 상속하여 마지막 인자로 전달.
OnAppControlStartResponseReceived 는 AppControl이 시도되었을 시점, result 인자로 제대로 실행되었는지 아닌지 확인이 필요하다.
OnAppControlCompleteResponseReceived 는 AppControl로 실행된 app이 종료되고 난 뒤 시점에 호출된다. 시점을 자세히 말하면 GUI상으로 다시 app이 보여지고 좀 있다가 호출되어 이 함수가 호출되고 호출한 app이 실행된다고 보면 안될것 같고 호출한 app은 그냥 동작하고 result에 따른 처리는 asynchrnous하게 실행하도록 해야 할 것 같다.
댓글 없음:
댓글 쓰기