所以,我希望我处于正确的位置,因为这是我的第一篇文章。
我有以下问题:我以以下示例为例实现了NSDManager:https://github.com/ymitis/xamarin-android-nsd-chat我使用了他的NSDHelper类,并做了其他所有事情,因此很适合我的目的。
如果我使用此应用程序扫描服务,则找不到任何服务。但是,如果我让此应用程序运行,打开注释并搜索无线打印机,我会突然在NSD应用程序中找到这些打印机。好像缺少一个核心功能,我不知道它可能是什么,因为git可以正常工作,但是我的应用程序却没有。
因此,到目前为止,我意识到:启动电话时,我要做的第一件事是使用标准应用程序搜索打印机,然后启动我的应用程序,我发现了所有服务。但是,如果我先启动设备然后启动我的应用程序,那么我找不到任何...
我的NSDHelper的代码与此处的相同:https://github.com/ymitis/xamarin-android-nsd-chat/blob/master/XamarinAndroidNsdChatApp/XamarinAndroidNsdChatApp/NsdHelper.cs 我只是更改了要搜索的服务名称。
我的主要活动如下:
using Android.App;
using Android.Widget;
using Android.OS;
using System.Net.Sockets;
using System.Net;
using System.Threading.Tasks;
using System.Linq;
using System.Text;
using Android.Net.Nsd;
using Android.Content;
using Android.Net.Wifi.P2p;
using Android.Net.Wifi;
using System.Threading;
using Makaretu.Dns;
using Orekaria.Lib.P2P;
[assembly: UsesPermission(Android.Manifest.Permission.ChangeWifiMulticastState)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessWifiState)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
[assembly: UsesPermission(Android.Manifest.Permission.ChangeWifiState)]
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
namespace NetworkDiscoveryTest
{
[Activity(Label = "NetworkDiscoveryTest", MainLauncher = true)]
public class MainActivity : Activity
{
WifiManager wifi;
WifiManager.MulticastLock mlock;
static TextView console;
NsdHelper nsd;
protected override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
nsd = new NsdHelper(this);
await Task.Run(new System.Action(Initialize));
//Layout naming
Button startButton = FindViewById<Button>(Resource.Id.startButton);
Button endButton = FindViewById<Button>(Resource.Id.endButton);
Button disButton = FindViewById<Button>(Resource.Id.disButton);
console = FindViewById<TextView>(Resource.Id.console);
startButton.Click += (s, args) =>
{
nsd.RegisterService(5353);
};
disButton.Click += (s, args) =>
{
nsd.DiscoverServices();
};
endButton.Click += (s, args) =>
{
nsd.StopDiscovery();
nsd.TearDown();
};
}
public void Initialize()
{
nsd.InitializeNsd();
}
}
}
我认为代码中并不是真正的东西,但是也许我缺少激活某些东西的命令?