NSDManager仅在标准应用程序中搜索打印机时才找到服务

时间:2019-04-04 11:14:18

标签: c# android xamarin.android mdns nsd

所以,我希望我处于正确的位置,因为这是我的第一篇文章。

我有以下问题:我以以下示例为例实现了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();
      }
   }
}

我认为代码中并不是真正的东西,但是也许我缺少激活某些东西的命令?

0 个答案:

没有答案