Вопрос

Создание моего приложения Bluetooth, мне нужен доступ к некоторым вещательным действиям на стороне Android моего кода.

Все это запускается в моем ядре, поэтому у меня есть просмотр моделе, который позвонит через мой интерфейс

public interface IConnectionService
{
    //Properties
    string IntentName { get; }

    //Events
    event EventHandler<SearchConnectionItemEventArgs> SearchItemFoundEvent;

    //Methods
    void RunIntent();
    void SearchConnection();
    void Connect(string macAddress);
}
.

RONINTENT предложит пользователю включить Bluetooth (может быть другой технологией), и я бы тогда хотел бы иметь триггер события, когда состояние Bluetooth изменяется

Android.Bluetooth.BluetoothAdapter.ActionStateChanged
.

, а также когда я ищу новые устройства, которые мне нужны

Android.Bluetooth.BluetoothDevice.ActionFound
.

Но я не могу поставить [android.runtime.register ("action_found")] и [android.runtime.register ("action_state_changed")] На моем классе это работает только, если я стараюсь поставить его на мой взгляд,Но если я сделаю это, мне нужна логика на мой взгляд?

Можно ли поставить его в ядро как-то?

Мой класс, реализующий мой интерфейс

using System;
using Android.Bluetooth;
using Android.Content;
using Cirrious.MvvmCross.Android.Platform.Tasks;
using Test.Core.Interfaces;
using Test.Core.Models;

namespace Test.Core.Android
{
    public class AndroidBluetooth : MvxAndroidTask, IConnectionService
    {
    #region Private Fields

    private readonly BluetoothAdapter _bluetoothAdapter;

    #endregion
    #region Public Fields

    #endregion
    #region Properties

    public string IntentName { get { return "Turn on Bluetooth"; }}

    #endregion
    #region Constructor

    public AndroidBluetooth()
    {
        _bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
    }

    #endregion
    #region Events

    public event EventHandler<SearchConnectionItemEventArgs> SearchItemFoundEvent;
    private void ItemFound(SearchConnectionItemEventArgs e)
    {
        if(SearchItemFoundEvent != null)
        {
            SearchItemFoundEvent(this, e);
        }
    }

    #endregion

    #region Methods
    public void RunIntent()
    {
        if (_bluetoothAdapter == null)
        {
            //No bluetooth support on phone
        }
        else if(!_bluetoothAdapter.IsEnabled)
        {
            var intent = new Intent(BluetoothAdapter.ActionRequestEnable);
            StartActivity(intent);
        }
    }

    public void SearchConnection()
    {

        if (_bluetoothAdapter == null)
        {
            //No bluetooth support on phone
        }
        else if (!_bluetoothAdapter.IsEnabled)
        {
            //Bluetooth not turned on
            RunIntent();
        }
        else
        {
            FindBondedDevices();
        }
    }

    private void FindBondedDevices()
    {
        var pairedDevices = _bluetoothAdapter.BondedDevices;

        if (pairedDevices.Count <= 0) return;

        foreach (var item in pairedDevices)
        {
            ItemFound(new SearchConnectionItemEventArgs {Name = item.Name, MacAddress = item.Address});
        }
    }

    private void FindNewDevices()
    {
        if (_bluetoothAdapter == null)
        {

        }
        else if (!_bluetoothAdapter.IsEnabled)
        {

        }
        else
        {
            _bluetoothAdapter.StartDiscovery();
            //Bind event for new devices
        }
    }

    public void Connect(string macAddress)
    {

    }
    #endregion
}
}
.

Это было полезно?

Решение

Отказ от ответственности: Я не знаком с этой частью Android - я никогда не использовал стек Bluetooth.

Из вашего описания звучит так, как будто вы уже знаете ответ - эти атрибуты должны идти на методы в пределах действия / представления.

Конечно, после того, как они были добавлены к активности / представлению, то это легко сделать этот метод вызовы до ViewModel - просто используйте свойство ViewModel в поле зрения.


Это, вероятно, проще попробовать получить эту часть вашей работы в качестве автономного образца первым - а затем выработать, как сделать его кроссплатформой и / или MVVM.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top