Pregunta

Hacer que mi aplicación Bluetooth tengo acceso a algunos de emisión de acciones en el Android lado de mi código.

Todo esto se ejecuta en el Núcleo de mi, así que tengo un ViewModel que se llame a través de mi interfaz

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

    //Events
    event EventHandler<SearchConnectionItemEventArgs> SearchItemFoundEvent;

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

RunIntent pide al usuario para activar la función Bluetooth (Podría ser de otra tecnología) y entonces me gustaría tener un desencadenador de eventos cuando el Bluetooth del estado es cambiado

Android.Bluetooth.BluetoothAdapter.ActionStateChanged

Y también cuando la búsqueda de nuevos dispositivos necesito

Android.Bluetooth.BluetoothDevice.ActionFound

Pero no puedo poner el [Android.En tiempo de ejecución.Registro("ACTION_FOUND")] y [Android.En tiempo de ejecución.Registro("ACTION_STATE_CHANGED")] en mi clase, esto sólo funciona si intento ponerlo en mi punto de Vista, pero si hago lo que necesito lógica en mi punto de vista?

Es posible ponerlo en el núcleo de alguna manera?

Mi clase de la aplicación de mi interfaz

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
}
}
¿Fue útil?

Solución

Descargo de responsabilidad:No estoy familiarizado con esta parte de Android - yo nunca he usado el Bluetooth stack.

Desde su descripción suena como usted ya sabe la respuesta, estos Atributos deben ir en los métodos dentro de la Actividad/Vista.

Por supuesto, una vez que han sido agregados a la Actividad/Vista entonces es fácil ruta de estas llamadas al método a través del ViewModel - sólo tiene que utilizar el ViewModel propiedad dentro de la Vista.


Es probablemente más fácil para tratar de conseguir que esta parte de su trabajo como independiente de la muestra de la primera y, a continuación, averiguar cómo hacerlo de la cruz-plataforma y/o mvvm.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top