2014년 5월 8일 목요일

Tizen app control

아래 내용은 Tizen 2.2 기반이라 상위 버전에서는 별 의미 없는 내용입니다.
--------------------------------------------------------------------------- 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하게 실행하도록 해야 할 것 같다.



댓글 없음:

댓글 쓰기