Tizen开发 - Application Control

来源:互联网 发布:停车场管理问题c语言 编辑:程序博客网 时间:2024/05/22 05:20

Tizen::App::AppControl 是tizen的标准机制,它可以调用其他应用export出的一些操作,比如call, media list, brower等等。同时你也可以导出你自己的特定的操作。

1. Using AppControls
使用Tizen::App::AppManager 来获得AppControl的实例,AppManager能发现需要调用的application。
1) Application ID 标示每个application control提供者,系统提供的ID有特定标示,如"tizen.phone";
2) Operation ID 标示Application Control的行为。系统提供的operation ID格式为"http://tizen.org/appcontrol/operation/<verb>",例如"http://vendor.com/appcontrol/operation/pick"
3) Resolving AppControls. 显示的resolving: AppManager::FindAppControlN()通过application ID 和operation ID 直接找到特定的application control;不明显的resolving:使用 AppManager::FindAppControlsN() 并提供operation ID,URI,MIME type等来获取一个application control列表;然后appcontrol调用start来启动相关的application。 AppControl::FindAndStart()提供了查询显示和调用的一条龙服务。
4) 当AppControl执行结束后,执行结果会被Tizen::App::IAppControlResponseListener接口的OnAppControlCompleteResponseReceived事件处理函数返回。
5) 使用AppControl调用一个Application的过程如下:


2. Developing with AppControls
1)导出application的功能,在manifest file 中配置;
每个native application在没有显示指定AppControl的情况下都能导出一个默认的AppControl。
AppManager::LaunchApplication()能使用这个默认的AppControl,使用"http://tizen.org/appcontrol/operation/main"这个默认的Operation ID。
为了处理来自其他应用的请求,提供operation的应用要实现 IAppControlProviderEventListener::OnAppControlRequestReceived() event handler.
如果没有实现该事件处理函数,如果收到一个来自其他的应用的请求,你的应用会进入前台,不会出现任何提示。
2)在处理结束后,AppControlProviderManager::SendAppControlResult()使用request ID将执行结果返回给调用application。如果被调用者终止了调用请求,没有发送回结果,tizen就会使用APP_CTRL_RESULT_TERMINATED 作为结果调用 IAppControlResponseListener::OnAppControlCompleteResponseReceived();
3)能处理并发的请求。
2)处理AppControl请求的流程如下:


3. example code

调用FileManager AppControl;

1) 效果图:


2) 代码

voidMyAppClass::AppControlMediaSample(void){   String mime = L"*/*";   HashMap extraData;   extraData.Construct();   String selectKey = L"http://tizen.org/appcontrol/data/selection_mode";   String selectVal = L"multiple";   extraData.Add(&selectKey, &selectVal);   AppControl* pAc = AppManager::FindAppControlN(L"tizen.filemanager",                                                  L"http://tizen.org/appcontrol/operation/pick");   if (pAc)   {      pAc->Start(null, &mime, &extraData, this);      delete pAc;   }}voidMyAppClass::OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId,                                                  const Tizen::Base::String& operationId,                                                  const Tizen::App::AppCtrlResult appControlResult,                                                  const Tizen::Base::Collection::IMap* pExtraData){   // This method is invoked when an application control callback event occurs   if (appId.Equals(L"tizen.filemanager")&&       operationId.Equals(L"http://tizen.org/appcontrol/operation/pick"))   {      AppCtrlResult mediaResult = appControlResult;      if (appControlResult  == APP_CTRL_RESULT_SUCCEEDED)      {         AppLog("Media list retrieving succeeded.");         // Use the selected media paths         if (pExtraData)         {            IMapEnumerator* pEnum = pExtraData->GetMapEnumeratorN();            while (pEnum->MoveNext() == E_SUCCESS)            {               String* pKey = dynamic_cast<String*>(pEnum->GetKey());               if (pKey->Equals(String(L"http://tizen.org/appcontrol/data/selected")))               {                  // The value is IList.                  IList* pValueList = dynamic_cast<IList*>(pEnum->GetValue());                  if (pValueList)                  {                     for (int i=0; i<pValueList->GetCount(); i++)                     {                           String* pValue = dynamic_cast<String*>(pValueList->GetAt(i));                        // Use the file path                     }                  }               }            }            delete pEnum;         }      }      else if (appControlResult  == APP_CTRL_RESULT_FAILED)      {         AppLog("Media list retrieving failed.");      }      else if (mediaResultappControlResult  == APP_CTRL_RESULT_CANCELED)      {         AppLog("Media list retrieving was canceled.");      }      else if (appControlResult == APP_CTRL_RESULT_TERMINATED)      {         AppLog("Media list retrieving was terminated.");      }      else if (appControlResult == APP_CTRL_RESULT_ABORTED)      {         AppLog("Media list retrieving was is aborted.");      }   }}