2017-11-02 3 views
0

Ich habe eine Xamarin.Android C# -Klasse geschrieben, die die io-Pins für die Android-Dinge OS auf meinem Raspberry Pi 3 läuft verwaltet. Wenn ich versuche, den Stift zu lesen diese Ausnahme wird ausgelöst:android.os.ServiceSpecificException Anrufer besitzt nicht BCM26 (Code 13)

android.os.ServiceSpecificException: Anrufer BCM26 nicht besitzt (Code 13)

aus:

1 // setup 
2 var io = new PeripheralManagerService(); 
3 Gpio p = io.OpenGpio("BCM26"); 
4 p.SetDirection(Gpio.DirectionIn); 
5 
6 // later I read it 
7 if (p.Value == HIGH) 
8  Console.WriteLine("Pin is high"); 
9 // Exception raised 

Was muss ich tun, um dieses Problem zu beheben?

bearbeiten: Der obige Code wird tatsächlich funktionieren. Ich habe versucht, die relevanten Teile nur in ein kleines Codebeispiel zu extrahieren, da das Original mehrere Threads enthielt und zu kompliziert zum Posten war, was zu einer Antwort führte, warum die Ausnahme ausgelöst wurde. Es war nicht mit Android-Diensten und Berechtigungen verknüpft. Der Stift, den ich zu lesen versuchte, wurde geschlossen, nachdem die Richtung eingestellt worden war. Durch das Entfernen des Anrufs zum Schließen wurde dieses Problem behoben.

+0

Welche Zeile verursacht die Ausnahme? – Blundell

+0

Können Sie Ihre Frage mit dem vollständigen StackTrace aktualisieren? Schließen Sie das 'Gpio'-Objekt beim Schließen Ihrer Aktivität? –

+0

Zeile 7 verursacht die Ausnahme. Aber eigentlich habe ich erkannt, was ich falsch gemacht habe, nachdem ich @ NickFelkers Kommentar gelesen habe. Es ist, weil der Stift geschlossen wurde, nachdem ich die Richtung eingestellt habe. Wenn Sie versuchen, einen geschlossenen Pin zu lesen, wird die Ausnahme angegeben. Ziemlich irreführend aber Problem ist jetzt gelöst :) – RespectableSlave

Antwort

0

Pin muss offen bleiben (schließen Sie es erst, wenn Sie wirklich damit fertig sind), ansonsten würde der Versuch, den Pin zu lesen, die kryptische Ausnahme auslösen, die mich mit Android-Berechtigungen wie Internet- oder Record-Audio-Berechtigungen verwechselte.