我们目前正在为我们的主要应用程序开发一种“附加”应用程序,以扩展其可能性。
我们扪心自问,在同一台设备上是否存在简单的应用程序间通信(在互联网上没有发现.)。我们的第一个想法是在我们的附加应用程序上创建一个服务器套接字,并将数据从主应用程序发送到它。
以下是服务器的C#代码:
public async Task Start()
{
Listener = new TcpListener(IPAddress.Parse(GetIP()), 7777);
var client = Listener.AcceptTcpClient();
while (true)
{
while (!client.GetStream().DataAvailable) ;
using (NetworkStream stream = client.GetStream())
{
byte[] data = new byte[client.Available];
stream.Read(data, 0, client.Available);
if (data.Length > 0)
{
String s = Encoding.UTF8.GetString(data);
if (!string.IsNullOrWhiteSpace(s))
OnMessageRecevied?.Invoke(s);
}
}
}
}
对于客户:
public async Task SendMessage(string msg)
{
tClient = new TcpClient();
var buffer = Encoding.UTF8.GetBytes(msg);
while (!tClient.Connected)
{
tClient.Connect(IPAddress.Parse(Server.GetIP()), 7777);
Thread.Sleep(100);
}
await tClient.GetStream().WriteAsync(buffer, 0, buffer.Length);
tClient.Close();
}
它似乎不起作用,因为我们的主要应用程序集中注意力,附加应用似乎停止收听。
这是这两个应用程序(总是在同一个设备上)之间通信的通用方式,还是我们必须开发单独的解决方案?如果是单独的解决方案,那么iOS的最佳解决方案是什么?安卓?我们在附加应用程序中使用了Xamarin,目前我们只针对iOS和Android。
注意:因为它是同一台设备,所以我们不想使用远程的webservice进行通信。
发布于 2016-02-24 23:07:19
经过多次搜索,似乎唯一的“跨平台”解决方案是Url方案。
iOS:https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-ios/
安卓:https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-android/
看起来Android可以处理1Mb的数据,并且iOS可以在系统内存允许的情况下处理1MB的数据。我们将base64url对数据进行编码,将其传递给iOS,并将其作为base64添加到意图的extraString数组中。
我们必须创建一个Android活动和一个iOS ViewController来处理该Url的调用,因此这是特定于平台的,但是主要的智能可以在平台之间共享。
通过这样做,我们的附加应用程序将不需要是iOS的应用程序的扩展,并且可以有自己的界面和屏幕。
https://stackoverflow.com/questions/35552706
复制相似问题