Wi-Fi Direct не обнаруживает пиров на некоторых устройствах - PullRequest
0 голосов
/ 04 декабря 2018

Я занимаюсь разработкой распределенного приложения, которое обменивается данными через Wi-Fi Direct, но я новичок в этой технологии и в настоящее время возился с ней.Но я сталкиваюсь с этой проблемой.Итак, сначала я определю среду:

Существует одно приложение для Android, разрабатываемое с использованием Xamarin (поэтому весь код будет на C #).У него есть только одно действие MainActivity.

Я развернул его на двух разных устройствах:

  • Motorola MotoG3: Android 6.0.1 (правая картинка)

  • Xiaomi Mi A1: Android 8.1.0 (левая картинка)

Важно : на обоих из них я могу искать пиров с помощью WiFi Direct прямо из встроенногов настройках сети, поэтому это не должно быть аппаратной проблемой.

А в чем проблема?Ну, с устройством MotoG3 приложение работает нормально, оно находит другое устройство (Mi A1) и какое-то соседнее устройство.Но когда он работает на устройстве Mi A1, он не найдет никаких пиров.При отладке обратный вызов OnPeersAvailable имеет для параметра пустой WifiP2pDeviceList.

Я знаю, что ситуация действительно выглядит как проблемы совместимости между Android SDK, но я попробовал все, что я прочитал: добавлениеобновление до последней целевой платформы, попытка обеих конфигураций Release и Debug, ... поэтому любая другая идея будет приветствоваться.

На следующих изображениях я показываю результат действия обнаружения одноранговых узлов для обоих упомянутых устройств.Слева: Mi A1 (не работает), справа: MotoG3 (работает нормально).

Фрагменты кода:

В файле MainActivity.cs:

 btnDiscover.Click += delegate
    {
        mManager.DiscoverPeers(mChannel, new MyActionListener(this));
    };
    peerListListener = new MyPeersListListener(this);

Класс MyActionListener

private class MyActionListener : Java.Lang.Object, WifiP2pManager.IActionListener
{
    private MainActivity mActivity;
    public MyActionListener(MainActivity mainActivity)
    {
        this.mActivity = mainActivity;
    }

    public void OnFailure([GeneratedEnum] WifiP2pFailureReason reason)
    {
        mActivity.tvConnStatus.SetText("Discovery starting failed", TextView.BufferType.Normal);
    }

    public void OnSuccess()
    {
        mActivity.tvConnStatus.SetText("Discovery started", TextView.BufferType.Normal);
    }
}

Класс MyPeersListListener

private class MyPeersListListener : Java.Lang.Object, WifiP2pManager.IPeerListListener
{
    private readonly MainActivity mainActivity;

    public MyPeersListListener(MainActivity mainActivity)
    {
        this.mainActivity = mainActivity;
    }

    public void OnPeersAvailable(WifiP2pDeviceList peersList)
    {
        if (peersList.DeviceList.Count == 0)
        {
            Toast.MakeText(mainActivity.ApplicationContext, "No devices found", ToastLength.Short).Show();
            return;
        }
        if (!peersList.Equals(mainActivity.mPeers))
        {
            mainActivity.mPeers.Clear();
            mainActivity.mPeers.AddRange(peersList.DeviceList);

            mainActivity.devicesNames = new string[peersList.DeviceList.Count];
            mainActivity.devicesArray = new WifiP2pDevice[peersList.DeviceList.Count];
            int i = 0;
            foreach (WifiP2pDevice device in peersList.DeviceList)
            {
                mainActivity.devicesNames[i] = device.DeviceName;
                mainActivity.devicesArray[i] = device;
                i++;
            }
            ArrayAdapter<string> adapter = new ArrayAdapter<string>(mainActivity.ApplicationContext, Android.Resource.Layout.SimpleListItem1, mainActivity.devicesNames);
            mainActivity.lvPeersList.Adapter = adapter;
        }
    }
}

В настоящее время предоставляются следующие разрешения:

  • android.permission.CHANGE_WIFI_STATE
  • android.permission.ACCESS_WIFI_STATE
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.INTERNET
  • android.permission.CHANGE_NETWORK_STATE
  • android.permission.UPDATE_DEVICE_STATS

Я думаю, что ничего не оставил, если есть ещеИнформация для обмена, просто спросите.

Любая помощь будет приветствоваться.

Спасибо.

...