Ich habe eine Bluetoothscanner-Klasse als Singleton erstellt, so kann ich während meiner gesamten Anwendung mit dem Bluetoothscanner kommunizieren.Singleton behält keine geänderten Eigenschaften
Ich dachte, beim Festlegen einer Eigenschaft eines Singleton würde es seinen Wert bleiben, anscheinend nicht? oder mache ich etwas falsch?
Das ist mein Singleton:
public sealed class BluetoothScanner
{
private static readonly BluetoothScanner instance = new BluetoothScanner();
public static BluetoothScanner Instance => BluetoothScanner.instance;
public bool IsConnected { get; set; }
private BluetoothScanner()
{
this.Adapter = BluetoothAdapter.DefaultAdapter;
}
public bool Connect()
{
var bondedDevices = this.Adapter.BondedDevices;
if (!bondedDevices.Any())
{
this.SendToastMessage("No paired devices found");
this.IsConnected = false;
}
if (this.socket.ConnectAsync().IsCompleted)
{
this.SendToastMessage($"Connected to Device {this.device.Name}");
this.IsConnected = true;
}
return this.IsConnected;
}
}
Die Connect
Verfahren wie dieses in meinem Fragment genannt wird:
public class ConditionSearchFragment : BaseTitledFragment<ConditionSearchViewModel>
{
protected override int FragmentId => Resource.Layout.fragment_condition_search;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (!BluetoothScanner.Instance.IsConnected)
{
BluetoothScanner.Instance.Connect();
}
BluetoothScanner.Instance.SendKey += this.OnSendKey;
BluetoothScanner.Instance.SendToast += this.OnSendToast;
return base.OnCreateView(inflater, container, savedInstanceState);
}
}
ich auf dem ersten Mal dachte ich es die Singleton initialisieren und dann wiederverwenden wieder und wieder. Aparently bei der Rückkehr in diese Klasse und OnCreateView()
heißt es erneut heißt es, es ist nicht verbunden und versucht so mit der connect-Methode zu verbinden, so dass eine Java.IO.Exception als es bereits einen offenen Socket.
Was mache ich gerade falsch?
Haben Sie Ihrem Manifest
HaroldSer
@ScottS nein ich wusste nicht einmal ich musste es tun? Was würde ich hinzufügen, wenn meine Klasse in diesem Namensraum lebt: 'Some.Fancy.Namespace.Droid.Bluetooth.BluetoothScanner' – Baklap4
Ihre Singleton-Implementierung sieht korrekt aus. Vielleicht gibt es dort einige Android-spezifische. Vielleicht werden Instanzen gesammelt, wenn Sie Aktivitäten über eine Absicht ändern (weil sie auf Betriebssystemebene ausgeführt wird und dazu führen kann, dass die Mono-Laufzeitumgebung geschlossen wird). –