Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android的后台服务中获取蓝牙可扩展状态_Android_Bluetooth_Xamarin.android_Bluetooth Lowenergy - Fatal编程技术网

在Android的后台服务中获取蓝牙可扩展状态

在Android的后台服务中获取蓝牙可扩展状态,android,bluetooth,xamarin.android,bluetooth-lowenergy,Android,Bluetooth,Xamarin.android,Bluetooth Lowenergy,我在Bluetooth Gatt回调中有以下方法,可响应任何Bluetooth连接更改: public override void OnConnectionStateChange(BluetoothGatt gatt, [GeneratedEnum] GattStatus status, [GeneratedEnum] ProfileState newState) { base.OnConnectionStateChange(gatt, status, newState); i

我在Bluetooth Gatt回调中有以下方法,可响应任何Bluetooth连接更改:

public override void OnConnectionStateChange(BluetoothGatt gatt, [GeneratedEnum] GattStatus status, [GeneratedEnum] ProfileState newState)
{
    base.OnConnectionStateChange(gatt, status, newState);

    if(newState == ProfileState.Connected)
    {
        gatt.DiscoverServices();
    }

    else if(newState == ProfileState.Disconnected)
    {
        gatt.Close();
        Log.Info("BLE", "Status: Disconnected");
    }

}
在我的后台服务中,我想在连接或断开可移动设备时,监听断开连接的任何连接

我的服务:

 [return: GeneratedEnum]
        public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
        {
            try
            {
                Toast.MakeText(this, "Background service started", ToastLength.Long);

// I want to listen for any connectivity changes here

            base.OnStartCommand(intent, flags, startId);
            return StartCommandResult.Sticky;

        }

有谁能帮助我实现这一点吗?

首先,可以创建一个
广播接收器来监听蓝牙的状态,如下所示:

public class BluetoothStateBroadcastReceive : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        Toast.MakeText(context, "Received intent!", ToastLength.Short).Show();
        string action = intent.Action;
        BluetoothDevice device = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice);
        switch (action)
        {
            case BluetoothDevice.ActionAclConnected:
                Toast.MakeText(context, "BluetoothDevice:" + device.Name + "Connected", ToastLength.Long).Show();
                break;
            case BluetoothDevice.ActionAclDisconnected:
                Toast.MakeText(context, "BluetoothDevice:" + device.Name + "Disconnected", ToastLength.Short).Show();
                break;
            case BluetoothAdapter.ActionStateChanged:
                Toast.MakeText(context, "BluetoothDevice:" + device.Name + "Changed", ToastLength.Short).Show();
                //int blueState = intent.GetIntExtra(BluetoothAdapter.ExtraState, 0);
                //switch (blueState)
                //{
                //    case BluetoothAdapter.STATE_OFF:
                //        Toast.MakeText(context, "off", ToastLength.Short).Show();
                //        break;
                //    case BluetoothAdapter.STATE_ON:
                //        Toast.MakeText(context, "on", ToastLength.Short).Show();
                //        break;
                //}
                break;
        }
    }
}
服务中
,您可以注册它:

public class BluetoothService : Service
{
    private BluetoothStateBroadcastReceive mReceive;

    public BluetoothService()
    {
    }

    public BluetoothService(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }

    [return: GeneratedEnum]
    public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
    {
        registerBluetoothReceiver();
        return base.OnStartCommand(intent, flags, startId);
    }

    public override IBinder OnBind(Intent intent)
    {
        throw new NotImplementedException();
    }

    private void registerBluetoothReceiver()
    {
        if (mReceive == null)
        {
            mReceive = new BluetoothStateBroadcastReceive();
        }
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.AddAction(BluetoothAdapter.ActionStateChanged);
        intentFilter.AddAction(BluetoothDevice.ActionAclConnected);
        intentFilter.AddAction(BluetoothDevice.ActionAclDisconnected);
        //intentFilter.AddAction("android.bluetooth.BluetoothAdapter.STATE_OFF");
        //intentFilter.AddAction("android.bluetooth.BluetoothAdapter.STATE_ON");
        RegisterReceiver(mReceive, intentFilter);
    }

    public override void OnDestroy()
    {
        unregisterBluetoothReceiver();
        base.OnDestroy();
    }

    private void unregisterBluetoothReceiver()
    {
        if (mReceive != null)
        {
            UnregisterReceiver(mReceive);
            mReceive = null;
        }
    }
}

然后,您可以在需要的地方尝试此功能。使用
服务时,您可以参考此功能。

首先,可以创建一个
广播接收器来监听蓝牙的状态,如下所示:

public class BluetoothStateBroadcastReceive : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        Toast.MakeText(context, "Received intent!", ToastLength.Short).Show();
        string action = intent.Action;
        BluetoothDevice device = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice);
        switch (action)
        {
            case BluetoothDevice.ActionAclConnected:
                Toast.MakeText(context, "BluetoothDevice:" + device.Name + "Connected", ToastLength.Long).Show();
                break;
            case BluetoothDevice.ActionAclDisconnected:
                Toast.MakeText(context, "BluetoothDevice:" + device.Name + "Disconnected", ToastLength.Short).Show();
                break;
            case BluetoothAdapter.ActionStateChanged:
                Toast.MakeText(context, "BluetoothDevice:" + device.Name + "Changed", ToastLength.Short).Show();
                //int blueState = intent.GetIntExtra(BluetoothAdapter.ExtraState, 0);
                //switch (blueState)
                //{
                //    case BluetoothAdapter.STATE_OFF:
                //        Toast.MakeText(context, "off", ToastLength.Short).Show();
                //        break;
                //    case BluetoothAdapter.STATE_ON:
                //        Toast.MakeText(context, "on", ToastLength.Short).Show();
                //        break;
                //}
                break;
        }
    }
}
服务中
,您可以注册它:

public class BluetoothService : Service
{
    private BluetoothStateBroadcastReceive mReceive;

    public BluetoothService()
    {
    }

    public BluetoothService(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }

    [return: GeneratedEnum]
    public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
    {
        registerBluetoothReceiver();
        return base.OnStartCommand(intent, flags, startId);
    }

    public override IBinder OnBind(Intent intent)
    {
        throw new NotImplementedException();
    }

    private void registerBluetoothReceiver()
    {
        if (mReceive == null)
        {
            mReceive = new BluetoothStateBroadcastReceive();
        }
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.AddAction(BluetoothAdapter.ActionStateChanged);
        intentFilter.AddAction(BluetoothDevice.ActionAclConnected);
        intentFilter.AddAction(BluetoothDevice.ActionAclDisconnected);
        //intentFilter.AddAction("android.bluetooth.BluetoothAdapter.STATE_OFF");
        //intentFilter.AddAction("android.bluetooth.BluetoothAdapter.STATE_ON");
        RegisterReceiver(mReceive, intentFilter);
    }

    public override void OnDestroy()
    {
        unregisterBluetoothReceiver();
        base.OnDestroy();
    }

    private void unregisterBluetoothReceiver()
    {
        if (mReceive != null)
        {
            UnregisterReceiver(mReceive);
            mReceive = null;
        }
    }
}

然后你可以在你想要的地方尝试。当使用
服务时,你可以参考这个。

你可以注册一个
广播接收器
来监听状态。我已经读过这方面的内容。。但从过去的两天起,我就被这件事缠住了。请帮助我,这必须需要后台服务才能侦听状态,或者是否可以侦听活动中的状态。我必须在后台服务中侦听
BLE
设备的连接更改。您可以注册
BroadcastReceiver
来侦听状态。我已经阅读了相关内容。。但从过去的两天起,我就被这件事缠住了。请帮忙好的,那一定需要后台服务来监听状态,或者是否可以监听活动中的状态。我必须在后台服务中监听
BLE
设备的连接更改。干得好。非常感谢你。非常感谢你的出色工作。非常感谢你。非常感谢