下载文档

widget模块
更新时间:2016-01-08

1、简介

管理当前应用

2、API概览

2.1、方法

appcan.widget.startWidget(appId,animId,funName,info,animDuration,callback)

在当前widget加载一个子widget

参数:

  1. appId:子widgetappId
  2. animId:子widget载入时的动画id:
  3. 0:无动画
  4. 1:从左向右推入
  5. 2:从右向左推入
  6. 3:从上向下推入
  7. 4:从下向上推入
  8. 5:淡入淡出
  9. 6:左翻页
  10. 7:右翻页
  11. 8:水波纹
  12. 9:由左向右切入
  13. 10:由右向左切入
  14. 11:由上先下切入
  15. 12:由下向上切入
  16. 13:由左向右切出
  17. 14:由右向左切出
  18. 15:由上向下切出
  19. 16:由下向上切出
  20. funName:方法名,子widget结束时将String型的任意字符回调给该方法,可为空。 注意:只在主窗口中有效,
  21. 浮动窗口中无效
  22. info:传给子widget的信息
  23. animDuration:动画持续时长,单位为毫秒,默认200毫秒
  24. callback(err,data,dataType,opId):(Function) 回调函数
  25. err:Error对象,如果为空表示没有错误
  26. data:回调返回的数据,0-成功 1-失败
  27. dataType:回调返回的数据类型,默认为2Int类型
  28. opId:操作ID,在此函数中不起作用,可忽略

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

例子:

  1. appcan.widget.startWidget({
  2. appId : '12345',
  3. animiId : '1',
  4. funName : 'widgetDidFinish',
  5. info : 'open a widget',
  6. animDuration : 300,
  7. callback : function(err,data,dataType,opId){
  8. if(!err){
  9. alert("data:"+data);
  10. }
  11. }
  12. })

appcan.widget.finishWidget(resultInfo,appId,isWgtBG)

退出一个widget

参数:

  1. resultInfo:此widget结束时,传递给opener的信息
  2. appId:要结束的widgetappId,为空时退出的是当前的widget
  3. NumberisWgtBG 结束此widget的方式,0表示销毁该widget,下次再调 startWidget时,重新打开;1表示把该widget置于
  4. 后台,下次再调用startWidget时,不重新打开,操作数据 全部保存。不传或为空时,默认为0。注意传该参数时,必须要传appId参数。

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

例如:

  1. appcan.widget.finishWidget({
  2. resultInfo : "finish a widget",
  3. appId : "12345",
  4. isWgtBG : 0
  5. });

appcan.widget.removeWidget(appId,callback)

删除一个widget

参数:

  1. appIdwidgetappId,主widget不能被删除
  2. callback(err,data,dataType,opId):(Function) 回调函数
  3. err:Error对象,如果为空表示没有错误
  4. data:回调返回的数据,0-成功 1-失败
  5. dataType:参数类型
  6. opId:操作ID,在此函数中不起作用,可忽略

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

例子:

  1. appcan.widget.removeWidget({
  2. appId : 12345”,
  3. callback : function(err,data,dataType,opId){
  4. if(!err){
  5. alert("data:"+data);
  6. }
  7. }
  8. });

appcan.widget.checkUpdate(callback)

检查当前widget是否有更新

参数:

  1. callback(err,data,dataType,opId):(Function) 回调函数
  2. err:Error对象,如果为空表示没有错误
  3. data:检查结果0- 需要更新 1- 不需要更新 2- 错误
  4. dataType:参数类型
  5. opId:操作ID,在此函数中不起作用,可忽略

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.checkUpdate(function(err,data,dataType,opId){
  2. alert("data:"+data);
  3. })
  4. 或者
  5. appcan.widget.checkUpdate({
  6. callback : function(err,data,dataType,opId){
  7. alert('data:'+data);
  8. }
  9. });

appcan.widget.loadApp(appInfo)

loadApp:启动第三方应用(iOS)

参数:

  1. appInfo:(String)第三方应用的URLSchemes

平台支持:

iOS 6.0+

JS-SDK版本支持:

1.0.0+

例如:

  1. var appInfo = "http://www.baidu.com";
  2. appcan.widget.loadApp(appInfo);

appcan.widget.startApp(startMode,mainInfo,addInfo,optInfo,callback)

startApp:启动第三方应用(Android)

参数:

  1. startMode:启动方式,0表示通过包名和类名启动,1表示通过Action启动
  2. optInfo:附加参数,键值对,{key:value}格式多个用英文”,”隔开
  3. startMode:启动类型,0或者1
  4. mainInfo:包名(startMode0时);action(startMode1时)
  5. addInfo:类名,为空时启动应用入口类(startMode0时);categorydatastartMode1时)
  6. json格式如下
  7. {
  8. "category": [
  9. "android.intent.category.WID",
  10. "android.intent.category.WID1"
  11. ],
  12. "data": {
  13. "mimeType": "image/png",
  14. "scheme": "sip"
  15. }
  16. }
  17. callback(info):启动第三方应用的回调方法,该方法在未成功调用第三方应用时回调。
  18. info:回调返回信息;

平台支持:

Android 2.2+

JS-SDK版本支持:

1.0.0+

注意事项:

如果通过包名类名启动AppCan应用,而且需要监听onLoadByOtherApp回调方法,则addInfo为必选。调用方法如下:
若包名为com.appcan.develop(开发者在使用时只需要更换包名即可),则调用代码如下:

  1. var packageName = "com.appcan.develop";
  2. var className = "org.zywx.wbpalmstar.engine.EBrowserActivity";
  3. var optInfo = "{'key1':'value1'},{'key2':'value1'}";
  4. appcan.widget.startApp({
  5. startMode : 0,
  6. mainInfo : packageName,
  7. addInfo : className,
  8. optInfo : optInfo,
  9. callback:function(info){
  10. alert(info);
  11. }
  12. });

示例:

1.要启动的AndroidManifest.xml文件如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.dongjf.mytest"//com.dongjf.mytest即为包名
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk
  7. android:minSdkVersion="11"
  8. android:targetSdkVersion="18" ></uses>
  9. <application
  10. android:allowBackup="true"
  11. android:label="@string/app_name"
  12. android:theme="@style/AppTheme" >
  13. <activity
  14. android:name="MainActivity"
  15. android:label="@string/app_name"
  16. android:icon="@drawable/icon1"
  17. android:windowSoftInputMode="stateHidden|adjustResize"
  18. >
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" ></action>
  21. <category android:name="android.intent.category.LAUNCHER" ></category>
  22. </intent-filter>
  23. <intent-filter>
  24. <action android:name="com.djf.test.main" ></action>
  25. <category android:name="android.intent.category.DEFAULT" ></category>
  26. </intent-filter>
  27. </activity>
  28. <activity android:name="com.dongjf.mytest.SecondActivity">
  29. //通过包名启动,<intent-filter>标签非必须
  30. <intent-filter>
  31. <action android:name="com.djf.test.second" ></action>
  32. //通过action启动时,category DEFAULT属性必须,否则无法调起
  33. <category android:name="android.intent.category.DEFAULT" ></category>
  34. <data android:scheme="tel"></data>
  35. </intent-filter>
  36. </activity>
  37. <activity android:name="com.dongjf.mytest.ThirdActivity">
  38. <intent-filter>
  39. <action android:name="com.djf.test.second" ></action>
  40. <category android:name="android.intent.category.DEFAULT" ></category>
  41. <category android:name="android.intent.category.WID" ></category>
  42. <category android:name="android.intent.category.WID1" ></category>
  43. <data android:scheme="sip" android:mimeType="image/png"></data>
  44. </intent-filter>
  45. </activity>
  46. <activity android:name="com.dongjf.mytest.ForthActivity">
  47. <intent-filter>
  48. <action android:name="com.djf.test.second" ></action>
  49. <category android:name="android.intent.category.WID" ></category>
  50. <category android:name="android.intent.category.DEFAULT" ></category>
  51. <data android:mimeType="text/html"></data>
  52. </intent-filter>
  53. </activity>
  54. </application>
  55. </manifest>

2.启动该应用对应界面示例如下:

  1. <!DOCTYPE HTML>
  2. <HTML>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  6. <script type="text/javascript">
  7. function startAppP(mode){
  8. var main,add,opt;
  9. main = "com.dongjf.mytest";
  10. switch(mode){
  11. case 0:
  12. appcan.widget.startApp({
  13. startMode : 0,
  14. mainInfo : main
  15. });//启动应用的入口主类
  16. break;
  17. case 1:
  18. add = "com.dongjf.mytest.SecondActivity";
  19. appcan.widget.startApp({
  20. startMode : 0,
  21. mainInfo : main,
  22. addInfo : add
  23. });//启动应用的SecondActivity类
  24. break;
  25. case 2:
  26. add = "com.dongjf.mytest.ThirdActivity";
  27. opt = "{'key1': 'value1'},{'key2': 'value2'}";
  28. appcan.widget.startApp({
  29. startMode : 0,
  30. mainInfo : main,
  31. addInfo : add,
  32. optInfo : opt
  33. });//启动应用的ThirdActivity类
  34. break;
  35. }
  36. }
  37. function startAppA(mode){
  38. var main,add,opt;
  39. switch(mode){
  40. case 0:
  41. main = "com.djf.test.main";
  42. appcan.widget.startApp({
  43. startMode : 1,
  44. mainInfo : main
  45. });//启动应用的MainActivity类
  46. break;
  47. case 1:
  48. main = "com.djf.test.second";
  49. add = '{"data":{"scheme":"tel"}}';
  50. appcan.widget.startApp({
  51. startMode : 1,
  52. mainInfo : main,
  53. addInfo : add
  54. });//启动应用的SecondActivity类
  55. break;
  56. case 2:
  57. main = "com.djf.test.second";
  58. add = '{"data":{"mimeType":"text/html"}}';
  59. opt = "{'key1': 'value1'},{'key2': 'value2'}";
  60. appcan.widget.startApp({
  61. startMode : 1,
  62. mainInfo : main,
  63. addInfo : add,
  64. optInfo : opt
  65. });//启动应用的ForthActivity类
  66. break;
  67. case 3:
  68. main = "com.djf.test.second";
  69. add = '{"data":{"mimeType":"image/png","scheme":"sip"}}';
  70. opt = "{'key1': 'value1'},{'key2': 'value2'}";
  71. appcan.widget.startApp(appcan.widget.startApp({
  72. startMode : 1,
  73. mainInfo : main,
  74. addInfo : add,
  75. optInfo : opt
  76. });//启动应用的ThirdActivity类
  77. break;
  78. case 4:
  79. main = "com.djf.test.second";
  80. add = '{"category":["android.intent.category.WID","android.intent.category.WID1"],"data":{"mimeType":"image/png","scheme":"sip"}}';
  81. appcan.widget.startApp({
  82. startMode : 1,
  83. mainInfo : main,
  84. addInfo : add,
  85. });//启动应用的ThirdActivity类
  86. break;
  87. }
  88. }
  89. </script>
  90. </head>
  91. <body>
  92. <input class="btn" type="button" value="通过包名启动0" onclick=startAppP(0)>
  93. <input class="btn" type="button" value="通过包名启动1" onclick=startAppP(1)>
  94. <input class="btn" type="button" value="通过包名启动2" onclick=startAppP(2)>
  95. <br><br>
  96. <input class="btn" type="button" value="通过Action启动0" onclick=startAppA(0)>
  97. <input class="btn" type="button" value="通过Action启动1" onclick=startAppA(1)>
  98. <input class="btn" type="button" value="通过Action启动2" onclick=startAppA(2)>
  99. <input class="btn" type="button" value="通过Action启动3" onclick=startAppA(3)>
  100. <input class="btn" type="button" value="通过Action启动4" onclick=startAppA(4)>
  101. </body>
  102. </html>

appcan.widget.getOpenerInfo(callback)

获取打开者传入此widget的相关信息。即调用startWidget时传入的info参数值。

参数:

  1. callback(err,data,dataType,opId):(Function) 回调函数
  2. err:Error对象,如果为空表示没有错误
  3. data:返回的数据 widget的打开者通过startWidget函数打开本widget时传入的info参数值
  4. dataType:参数类型
  5. opId:操作ID,在此函数中不起作用,可忽略

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.getOpenerInfo(function(err,data,dataType,opId){
  2. if(!err){
  3. alert('data:'+data);
  4. }
  5. })
  6. 或者
  7. appcan.widget.getOpenerInfo({
  8. callback : function(err,data,dataType,opId){
  9. if(!err){
  10. alert('data:'+data);
  11. }
  12. }
  13. })

appcan.widget.installApp(appPath)

根据安装包所在路径安装一个apk(Android方法)。

参数:

  1. appPath:(String)apk所在路径

平台支持:

Android 2.2+

JS-SDK版本支持:

1.0.0+

示例:

  1. var path = "res://pay.apk";
  2. appcan.widget.installApp({
  3. appPath : path
  4. });
  5. 或者
  6. appcan.widget.installApp(path);

appcan.widget.getPushInfo(callback)

获取推送消息,上报消息到管理后台

参数:

  1. callback(data,dataType,opId):(Function) 回调函数
  2. err:Error对象,如果为空表示没有错误
  3. data:返回的数据 json格式字符串
  4. dataType:参数类型
  5. opId:操作ID,在此函数中不起作用,可忽略

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.getPushInfo({
  2. callback : function(err,data,dataType,opId){
  3. if(!err){
  4. alert('data:'+data);
  5. }
  6. }
  7. });

appcan.widget.setPushNotifyCallback(cbFunction)

如果应用开启了推送功能,那么当有消息推送进来时,平台将调用指定的cbFunction函数通知页面。

参数:

  1. cbFunction:(String)回调函数方法名

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.setPushNotifyCallback('pushCallback');
  2. function pushCallback(){
  3. alert("收到推送消息");
  4. }

appcan.widget.setPushInfo(uId,uNickName)

设置推送用户信息

参数:

  1. uId:用户ID
  2. uNickName:用户昵称

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.setPushInfo({
  2. uId : 'user10001',
  3. uNickName : '姓名'
  4. });

appcan.widget.setPushState(state)

设置推送服务的状态

参数:

  1. state: 推送服务状态0-关闭 1-开启

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.setPushState(0);

appcan.widget.getPushState(callback)

获取推送服务的状态

参数:

  1. callback(data,dataType,opId):(Function) 回调函数
  2. err:Error对象,如果为空表示没有错误
  3. data:0-关闭 1-开启
  4. dataType:参数类型
  5. opId:操作ID,在此函数中不起作用,可忽略

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.getPushState({
  2. callback : function(err,data,dataType,opId){
  3. if(!err){
  4. alert('data:'+data);
  5. }
  6. }
  7. })

appcan.widget.isAppInstalled(appData,callback)

是否安装某第三方应用

参数:

  1. appData:(String)第三方应用数据,android平台为第三方应用包名;iOS平台为 Scheme Url
  2. callback(data):(Function) 回调函数
  3. err:Error对象,如果为空表示没有错误
  4. data:0-已安装;1-未安装

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.isAppInstalled({
  2. appData : 'com.tencent.mobileqq',
  3. callback : function(err,data){
  4. if(!err){
  5. if(data == 0){
  6. alert('已安装');
  7. }else if(data ==1){
  8. alert('未安装');
  9. }else{
  10. alert(data);//错误
  11. }
  12. }
  13. }
  14. });

2.2 监听方法

  • 所有的监听方法都得在root页面进行监听

appcan.widget.onLoadByOtherApp

被第三方应用调起的监听方法

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.onLoadByOtherApp = function(jsonData){
  2. alert(jsonData);
  3. //{"key1":"value1","key2":"value2"}
  4. }

appcan.widget.loadByOtherApp(callback)

被第三方应用调起的监听方法

参数:

  1. callback(jsonData):(Function) 回调函数
  2. jsonData:(String类型) 必选 传递的数据,json格式{"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}

JS-SDK版本支持:

1.0.0+

示例:

应用1启动应用2的注册代码(Android)

  1. var packageName ="com.appcan.develop";
  2. var className = "org.zywx.wbpalmstar.engine.EBrowserActivity";
  3. var optionInfo = '{"key1":"value1"},{"key2":"value2"}';
  4. appcan.widget.startApp({
  5. startMode:0,
  6. mainInfo:packageName,
  7. addInfo:className,
  8. optInfo:optionInfo,
  9. callback:function(info){//未成功调用起第三方app时执行此回调
  10. alert(info)
  11. }
  12. });

应用2入口页面注册监听代码:

  1. appcan.widget.loadByOtherApp(function(jsonData){
  2. alert(jsonData);
  3. //{"key1":"value1","key2":"value2"}
  4. });

appcan.widget.onSuspend

程序挂起的监听方法

示例:

  1. appcan.widget.onSuspend = function(){
  2. alert("程序挂起");
  3. }

appcan.widget.suspend(callback)

程序挂起的监听方法

参数:

  1. callback:(Function) 回调函数

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.suspend({
  2. callback : function(){
  3. alert("程序挂起");
  4. }
  5. });
  6. 或者
  7. appcan.widget.suspend(function(){
  8. alert("程序挂起");
  9. });

appcan.widget.onResume

程序恢复的监听方法

示例:

  1. appcan.widget.onResume = function(){
  2. alert("程序恢复");
  3. }

appcan.widget.resume(callback)

程序恢复的监听方法

参数:

  1. callback():(Function) 回调函数

平台支持:

Android 2.2+
iOS 6.0+

JS-SDK版本支持:

1.0.0+

示例:

  1. appcan.widget.resume({
  2. callback : function(){
  3. alert("程序恢复");
  4. }
  5. });
  6. 或者
  7. appcan.widget.resume(function(){
  8. alert("程序恢复");
  9. });