【发布时间】:2016-06-03 19:46:48
【问题描述】:
我们目前正在为我们的主应用开发一种类似于“附加”应用的应用,以扩展其可能性。
我们问自己,在同一设备上是否存在简单的应用间通信(在互联网上没有找到相关的信息......)。我们的第一个想法是在我们的附加应用程序上创建一个服务器套接字,并将数据从主应用程序发送到它。
这是服务器的 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。
注意:因为是同一个设备,我们不希望使用远程网络服务进行通信。
【问题讨论】:
-
附加应用程序会有用户界面,还是只提供后台功能?在设备上运行的本地服务可以成为解决方案的一部分,在前一种情况下作为“桥梁”,或者在后一种情况下作为附加功能的提供者。
-
如果需要,附加应用程序将拥有自己的 UI,但主要用作服务。但是,似乎本地服务仅适用于 Android(或者它在 iOS 中的名称不同,我还没有找到)
-
iOS 的沙盒要求会阻止此类事情发生,您可以使用引入的新扩展架构在两个应用程序之间进行通信 developer.apple.com/app-extensions
-
好吧,但iOS的扩展似乎不允许在后台运行......有了这个,我们如何与主应用程序建立对话框来检索和发送数据
-
您有生成附加应用程序的教程链接吗?我需要同样的东西
标签: c# android ios xamarin xamarin.ios