C# 使用Xamarin在同一设备iOS/Android上的两个应用程序之间进行通信
我们目前正在开发一个应用程序,它是我们的主应用程序的一种“附加”应用程序,以扩展其可能性 我们问自己,在同一台设备上是否有简单的应用程序间通信(在互联网上找不到这种通信…)。我们的第一个想法是在我们的附加应用程序上创建一个服务器套接字,并将数据从主应用程序发送到它 以下是服务器的C#代码:C# 使用Xamarin在同一设备iOS/Android上的两个应用程序之间进行通信,c#,android,ios,xamarin,xamarin.ios,C#,Android,Ios,Xamarin,Xamarin.ios,我们目前正在开发一个应用程序,它是我们的主应用程序的一种“附加”应用程序,以扩展其可能性 我们问自己,在同一台设备上是否有简单的应用程序间通信(在互联网上找不到这种通信…)。我们的第一个想法是在我们的附加应用程序上创建一个服务器套接字,并将数据从主应用程序发送到它 以下是服务器的C#代码: public async Task Start() { Listener = new TcpListener(IPAddress.Parse(GetIP()), 7777);
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
注意:因为它是同一台设备,我们不想使用远程Web服务进行通信。经过多次搜索,似乎唯一的“跨平台”解决方案是Url方案 对于iOS: 对于Android: 安卓系统似乎可以处理1Mb的数据,并在一个意图中传递,而iOS可以处理URL中系统内存允许的最大数据量。我们将对数据进行base64url编码以将其传递给iOS,并将其作为base64添加到intent的Android extraString数组中 我们必须创建一个Android活动和一个iOS ViewController来处理Url调用,因此这是特定于平台的,但主要智能可以在平台之间共享
通过这样做,我们的附加应用程序将不需要是iOS应用程序的扩展,并且可以有自己的界面和屏幕。附加应用程序会有用户界面,还是只提供后台功能?在设备上运行的本地服务可以是解决方案的一部分,在前一种情况下作为“桥梁”,或者在后一种情况下作为附加功能的提供者。如果需要,附加应用程序将有自己的UI,但主要作为服务工作。然而,本地服务似乎只适用于Android(或者它在iOS中的名称不同,我还没有找到它)iOS的沙箱要求将阻止这种事情,你可以使用新引入的扩展架构在两个应用程序之间进行通信,但似乎iOS的扩展不允许在后台运行。。。有了这个,我们如何建立与主应用程序的对话来检索和发回数据您是否有生成附加应用程序的教程链接?我需要同样的东西你知道一种与“服务”(没有UI)通信的方法吗?如本文所述:@Apidcloud您找到了解决方案吗?