本教程目的在于让大家熟悉并掌握各种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();
更多重载见:帮助文档