我们目前正在开发一款应用程序,这是我们主要应用程序的一个“插件”应用程序,以扩展其功能。
我们思考是否有简单的同一设备内应用程序间通信方式(在互联网上没有找到相关内容…)。我们最初的想法是在我们的插件应用程序上创建一个服务器套接字,并从主应用程序向其发送数据。
下面是服务器端的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和Android来说哪种是最好的解决方案?我们使用Xamarin制作Add-on应用程序,并且目前仅针对iOS和Android。
注意:由于是同一设备,我们不想使用远程Web服务进行通信。