本教程目的在于让大家熟悉并掌握各种API的使用。
可下载运行SmobilerTutorials测试
                C#:
                 this.Client.Pattern.Create((obj, args) =>
                    {
                        if (args.isError == true)
                            Toast(args.error);
                        else
                        {
                            this.Client.Pattern.Password = args.Password;
                            Toast(args.Password);
                        }
                    });
            
            
                 C#:
                 this.Client.Pattern.VerifyLocal((obj, args) =>
                    {
                        if (args.isError == true)
                            Toast(args.error);
                        else
                            Toast("Sucess");
                    });
            
            
                C#:
                 this.Client.Pattern.VerifyServer((obj, args) =>
                    {
                        if (args.isError == true)
                            Toast(args.error);
                        else
                            Toast(args.Password);
                    });
            
            进行资源信息的分享,包括url链接、文本信息。
调用代码:Client.Share.SendURL("http://smobiler.com/");
语法:Client.Share.SendURL(分享地址);
Client.Share.SendText(文本内容);
            this.Client.Contacts.Show();
this.Client.Contacts.Add("smobiler", "18888888888", "smobiler@smobiler.com");
                   C#:
                     this.Client.Contacts.GetContactEnties((obj, args) =>
                    {
                        if (args.isError == true)
                        {
                            MessageBox.Show(args.error);
                        }
                        else
                        {
                            MessageBox.Show(string.Format("共计:{0}", args.Value.Count));
                        }
                    });
            
            
                   C#:
                    this.Client.Resource.Load(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "resources.zip"), (obj, args) =>
                    {
                        if (args.isError == true)
                            Toast(args.error);
                        else
                            Toast("Done");
                    });
            
            
                   C#:
                   this thisClient.Resource.Get(new Smobiler.Core.RPC.ClientResourceFilter("*c*", ""), (obj, args) =>
                    {
                        if (args.isError == true)
                            Toast(args.error);
                        else
                        {
                            List list = new List();
                            foreach (Smobiler.Core.RPC.ClientResourceArgs.ResourceData data in args.Resouces)
                            {
                                list.Add(string.Format("{0}/{1}/{2}", data.ResourceID, data.ResourceSize, data.ResourceDate));
                            }
                            MessageBox.Show(string.Format("数量{0}\r\n{1}", args.Count, string.Join("\r\n", list.ToArray())));
                        }
                    });
              
            
                   C#:
                  this.Client.Resource.Remove(new string[] { "1.png", "2.png", "3.png" }, MobileResourceManager.DefaultImageResourceName, (obj, args) =>
                    {
                        if (args.isError == true)
                            Toast(args.error);
                        else
                            Toast(args.Count.ToString());
                    });
            
            
                   C#:
                  this.Client.Resource.Remove(new Smobiler.Core.RPC.ClientResourceFilter("*c*", ""), (obj, args) =>
                    {
                        if (args.isError == true)
                            Toast(args.error);
                        else
                            Toast(args.Count.ToString());
                    });
            
            this.Client.File.Download("领用单.doc", MobileResourceManager.DefaultDocumentResourceName, (obj, args) => { this.Toast(args.isError.ToString()); });
this.Client.File.Delete("领用单.doc", MobileResourceManager.DefaultDocumentResourceName, (obj, args) => { this.Toast(args.isError.ToString()); });
this.Client.File.Open("领用单.doc", MobileResourceManager.DefaultDocumentResourceName, (obj, args) => { this.Toast(args.isError.ToString()); });
this.Client.File.List((obj, args) => { this.Toast(args.Count.ToString()); });
this.Client.File.Exists("领用单.doc", MobileResourceManager.DefaultDocumentResourceName, (obj, args) => { this.Toast(args.Exists.ToString()); });
                  C#:
              this.Client.File.Upload((obj, args) =>
                    {
                        if (args.isError == false)
                        {
                            args.SaveFile();
                            this.Toast(string.Format("{0}", args.ResourceID));
                        }
                        else
                        {
                            Toast(args.error);
                        }
                    });
            
                   C#:
                  this.Client.SQLite.OpenOrCreate(new Smobiler.Core.RPC.SQLiteDataBase("oudi.db"), (obj, args) =>
                    {
                        if (args.isError == true)
                            MessageBox.Show(args.error);
                        else
                            Toast("OpenDataBase sucess");
                    });
            
            
                   C#:
                   this.Client.SQLite.Execute(new string[] { "create table IF NOT EXISTS tbloudi (ID INT PRIMARY KEY     NOT NULL,NAME           TEXT    NOT NULL )", "insert into tbloudi values(" + DateTime.Now.Millisecond + ",'oudi')" }, (obj, args) =>
                    {
                        if (args.isError == true)
                            MessageBox.Show(args.error);
                        else
                            Toast("SetDataBase sucess");
                    });
            
            
                C#:
                    this.Client.SQLite.Read("select * from tbloudi", (obj, args) =>
                    {
                        if (args.isError == true)
                            MessageBox.Show(args.error);
                        else
                            Toast(args.Data.Rows.Count.ToString());
                    });
            
            
                   C#:
                 this.Client.SQLite.Close(new Smobiler.Core.RPC.SQLiteDataBase("oudi.db"), (obj, args) =>
                    {
                        if (args.isError == true)
                            MessageBox.Show(args.error);
                        else
                            Toast("CloseDataBase sucess");
                    });
            
            
                   C#:
                    this.Client.SQLite.Delete(new Smobiler.Core.RPC.SQLiteDataBase("oudi.db"), (obj, args) =>
                    {
                        if (args.isError == true)
                            MessageBox.Show(args.error);
                        else
                            Toast("DeleteDataBase sucess");
                    });
            
            Toast(this.Form.Client.CoreVersion.ToString());
注:获取的是云平台打包页上的内核版本
            Toast(this.Form.Client.Device);
Toast(this.Form.Client.DeviceID);
Toast(this.Form.Client.DeviceOS);
Toast(this.Form.Client.DeviceOSVersion);
Toast(this.Form.Client.EnableStackView.ToString());
Toast(this.Form.Client.IPEndPoint.ToString());
Toast(this.Form.Client.LastDate.ToString());
Toast(this.Form.Client.ScreenDensity.ToString());
Toast(this.Form.Client.ScreenSize.ToString());
Toast(this.Form.Client.SessionID);
Toast(this.Form.Client.StartDate.ToString());
Toast(this.Form.Client.UserSessionID);
Toast(this.Form.Client.Version.ToString());
注:获取的是云平台打包页上的版本
            this.Form.Client.Exit();
this.Form.Client.ExitAndQuit();
this.Client.ShowPermission();
this.Client.ShowOfflineResources();
this.Client.ShowNetworkDiagnosis();
this.Client.ShowAbout();
                   C#:
                      this.Client.GetNetWorkType((obj, args) =>
                    {
                        if (args.isError == true)
                        {
                            MessageBox.Show(args.error);
                        }
                        else
                        {
                            MessageBox.Show(args.NetWorkType.ToString());
                            //args.WifiBSSID 获取bssid   仅限Android
                            //args.WifiIP  获取ip
                            //args.WifiSSID 获取ssid 
                       }
                    });
            
            
                   C#:        
                this.Client.GetStatusbarHeight((obj, args) =>
                    {
                        if (args.isError == true)
                        {
                            MessageBox.Show(args.error);
                        }
                        else
                        {
                            MessageBox.Show(args.Height.ToString());
                        }
                    });
            this.Client.PlayAudio("001.mp3", AppDomain.CurrentDomain.BaseDirectory);
PlayAudio的第二个参数AppDomain.CurrentDomain.BaseDirectory 表示的是bin\debug, 001.mp3是在bin\debug目录下
this.Client.StopAudio();
调用手机邮箱功能进行发送邮件。
调用代码:Client.SendEmail("请假","今天身体不舒服,请个假","627573361@qq.com");
            语法:Client.SendEmail(邮件标题,邮件内容,收件人邮箱);
调用手机的发送短信功能进行短信发送。
调用代码:Client.SendSMS("11","10086");
            语法:Client.SendSMS(发送信息,发送号码)
调用手机的拨号功能进行拨打电话。
调用代码:Client.TelCall("10086");
            语法:Client.TelCall(拨打号码)
调用默认浏览器进行网页跳转。
调用代码:RedirectUrl("http://smobiler.com/");
RedirectUrl("http://smobiler.com/",true);// 第二个参数设置在Web模式下是否打开新的Tab标签页
            语法:RedirectUrl(跳转网址)
调用手机蓝牙功能,进行蓝牙打开判断,蓝牙设置。
1. 蓝牙打开判断,代码如下:
                C#:
                    private void btnOpenBule_Press(object sender, EventArgs e)
                    {
                        try
                        {
                            this.Client.Bluetooth.IsOpen((object obj, Smobiler.Core.RPC.BluetoothManagerIsOpenArgs args) =>
                            {
                                if (args.IsOpen == true)
                                    Toast("Open");
                                else
                                    Toast("Not Open");
                            });
                        }
                        catch(Exception ex)
                        {
                            Toast(ex.Message, ToastLength.SHORT);
                        }
                    }
            
                
            2. 打开手机蓝牙设置界面,进行蓝牙设置,代码如下:
                C#:
                    private void btnShow_Press(object sender, EventArgs e)
                    {
                        try
                        {
                            this.Client.Bluetooth.Show();                       
                        }
                        catch(Exception ex)
                        {
                            Toast(ex.Message, ToastLength.SHORT);
                        }
                    }
            
            this.Client.GetClipboard((obj, args) => { if (args.isError == true) Toast("isError: " + args.isError.ToString()); else Toast(args.Data); });
this.Client.SetClipboard(DateTime.Now.ToString(), (obj, args) => { Toast("isError: " + args.isError.ToString()); });
this.Client.ClearCache((obj, args) => { if (args.isError == false) Toast("清除成功"); else Toast(args.error); });
调用代码:
创建Socket:MobileSocket socket = this.Client.Socket.Create(this.Client.HostAddress, this.Client.HostTcpPort);
Socket连接:socket.Connect(MobileSocketEventHandler connectHandler);
Socket发送数据:socket.Send(byte[] data, MobileSocketEventHandlersendHandler);
Socket获取状态:socket.IsOpen(MobileSocketIsOpenEventHandler isopenHandler);
Socket关闭连接:socket.Close(MobileSocketEventHandler closeHandler);
完整代码参考:demo
在4.8版本可通过浏览器打开smobiler应用,唤醒地址为smobiler+云平台应用ID://url/自定义参数 。比如应用ID为20,那么打包后可使用 smobiler20://url/params1/params2,如下图,在手机端打开网页点击跳转即可打开smobiler应用
            在服务端可在MobileGlobal.cs文件中通过 UrlLinking方法获取这两个参数。
                    C#:
                        public static void OnSessionStart(object sender, SmobilerSessionEventArgs e)
                        {
                            e.Client.UrlLiking += (obj, args) =>
                            {
                                //把obj转换为ClientVariables
                                ClientVariables client = obj as ClientVariables;
                                //获取当前激活的窗体
                                Smobiler.Core.Controls.MobileForm form = client.GetActiveForm();
                                //当前窗体上弹出MessageBox
                                form.MessageBox.Show(string.Join("/", args.UrlParams));
                            };
                        }
           1. 保存保存当前应用资源路径
调用代码:this.Client.SaveImageToAlbum("logon.png", MobileResourceManager.DefaultImageResourceName);
语法:this.Client.SaveImageToAlbum(图片名称, 图片路径);
2. 保存网络资源
调用代码:this.Client.SaveImageToAlbum("https://www.smobiler.com/images/index/logo.png");
语法:this.Client.SaveImageToAlbum(图片链接);
调用代码:
开始 this.Client.Timer.Start(1,(obj,args)=>{ Toast("ClientGloablTimer" + DateTime.Now.ToString());});//Start方法后面第1个参数为触发间隔的秒,第二个参数是Tick回调
停止 this.Client.Timer.Stop();
调用代码:
this.Client.Vibrate();
调用代码:
this.Client.PlaySystemSound(Smobiler.Core.Protocol.SystemSoundType.Alarm, 0);
调用代码:
                    C#:
                        //心跳开启
                        //interval 心跳间隔(毫秒),handler 超时回调 ,intervalHandler 心跳回调
                        this.Client.HeartBeatEnable(5000,
                        (obj, args) =>
                        {
                            //心跳超时时触发
                        }, (obj, args) =>
                        {
                            //每次心跳时触发
                        });
                        //心跳关闭
                        this.Client.HeartBeatDisable();
                    
            更多重载见:帮助文档