Problem z aplikacją

Mario23

New Member
Witam,
Próbuje napisać aplikację na nowym androidzie, ale utknąłem. Poniżej wysyłając cod .Może pomóc z tym problemem.

#Region Atrybuty aktywność
#Pełny ekran: Fałsz
#IncludeTitle: Prawda
#Zakończ region

Podproces_Globals
'Globalne zmienne deklarowane raz przy starcie aplikacji.
Te zmienne mogą być dostępne dla wszystkich.
Przyciemnij administratora Jako administratora Bluetooth
Przyciemnij serial1 Jako serial
Dim foundUrządzenia jako lista
Wpisz NameAndMac (Nazwa jako ciąg, Mac jako ciąg)
Przyciemnij urządzenie jako NameAndMac

Dim połączony jako wartość logiczna
Przyciemnij jako AsyncStreamsText
Przyciemnienie Jak TTS
Dim rp jako władza wykonawcza
Przyciemnij xui Jak XUI
Napis końcowy

Subglobaliści
„Te zmienne globalne będą deklarowane za każdym razem, gdy aktywność jest tworzona.
'Te zmienne mogą być dostępne tylko z tego modułu.

Prywatny przycisk btnWyślij jako
Prywatny edtText jako EditText
Prywatny edtLog jako edycja tekstu
Prywatny przycisk btnConnect jako
Prywatny przycisk btnWyszukaj jako
Prywatny btnRozłącz jako przycisk
Prywatny vr jako rozpoznawanie głosu
Prywatne okno dialogowe Jako B4XDialog
Prywatny panel dialogowy jako B4XView

„Deklaracje zdarzenia
#Event: NewText (tekst jako ciąg znaków)
#Wydarzenie: Zakończone
Napis końcowy

Sub Activity_Create (pierwszy raz jako wartość logiczna)
„Nie zapomnij o zgodności systemu utworzonego za pomocą projektanta wizualnego.
Aktywność.LoadLayout("1")
Activity.Title = "ATNEL BT (brak połączenia)"

vr.Initialize("vr")
tts.Initialize("tts")
dialog.Initialize(Aktywność)

Jeśli po raz pierwszy, to
połączyć = Fałsz
admin.Initialize("administrator")
serial1.Initialize("Serial1")
Sprawdź licencję
Zakończ jeśli

włącz_kontrole (połączony)
Napis końcowy

Sprawdź uprawnienia podrzędne
Jeśli rp.Check(rp.PERMISSION_ACCESS_FINE_LOCATION) = Fałsz do
rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
Zakończ jeśli
Jeśli rp.Check(rp.PERMISSION_RECORD_AUDIO) = Fałsz
rp.CheckAndRequest(rp.PERMISSION_RECORD_AUDIO)
Zakończ jeśli

Dla nowszej wersji Androida wymagane są uprawnienia Bluetooth
Jeśli rp.Check("android.permission.BLUETOOTH_SCAN") = Fałsz
rp.CheckAndRequest("Android.permission.BLUETOOTH_SCAN")
Zakończ jeśli
Jeśli rp.Check("android.permission.BLUETOOTH_CONNECT") = Fałsz do
rp.CheckAndRequest("Android.permission.BLUETOOTH_CONNECT")
Zakończ jeśli
Napis końcowy

Poddziałanie_Wznów
Jeśli admin.IsEnabled = Fałsz
Jeśli admin.Enable = Fałsz do
ShowMessageAsync("Nie udało się włączyć Bluetooth", "Błąd")
W razie wypadku
ShowMessageAsync("Włączam adapter Bluetooth...", "Informacja")
Zakończ jeśli
W razie wypadku
admin_StateChanged(admin.STATE_ON, 0)
Zakończ jeśli
Napis końcowy

Sub Activity_Pause (UserClosed As Boolean)
Jeśli użytkownik jest zamknięty, to
Jeśli ast.IsInitialized Następnie ast.Close
serial1.Rozłącz
Aktywność.Zakończ
Wyjdź z aplikacji
Zakończ jeśli
Napis końcowy

'-------------------------------- Bluetooth ----------------------------
Sub admin_StateChanged(NewState jako Int, OldState jako Int)
Jeśli NewState = admin.STATE_ON Wtedy
ShowMessageAsync("Bluetooth urządzenia", "Informacja")
Inaczej Jeśli NewState = admin.STATE_OFF Wtedy
ShowMessageAsync("Bluetooth wyłączony", "Informacja")
Zakończ jeśli
Napis końcowy

Podrzędny administrator_DiscoveryFinished
Okno postępuUkryj
Jeśli znalezionoDevices.Size = 0 Następnie
ShowMessageAsync("Nie znaleziono urządzenia BT." & CRLF & "Spróbuj ponownie", "Błąd")
W przeciwnym razie
Przyciemnij IL jako lista
IL.Initialize
Dla i = 0 Do znalezionych urządzeń.Rozmiar - 1
Dim nm As NameAndMac
nm = znalezione urządzenia.Get(i)
IL.Add(nm.Name)
Następny
Przyciemnienie Jak Int
res = lista wejściowa(IL, "Wybierz urządzenie z listami", -1)
Jeśli res <> DialogResponse.CANCEL Następnie
połączone urządzenie = znalezione urządzenia. Get (res)
ProgressDialogShow("Próba połączenia z: " & CRLF & ConnectedDevice.Name & CRLF & "MAC ADR (" & ConnectedDevice.Mac & ")")
serial1.Connect(połączone urządzenie.Mac)
Zakończ jeśli
Zakończ jeśli
Napis końcowy

Sub admin_DeviceFound(Nazwa jako ciąg, adres Mac jako ciąg)
Dim nm As NameAndMac
nm.Zainicjuj
nm.Nazwa = Imię
nm.Mac = Adres Mac
znalezione urządzenia.Dodaj(nm)
ProgressDialogShow("Poszukiwanie urządzeń (znaleziono " & foundDevices.Size & ")...")
Napis końcowy

'---------------------- Obsługa serial1 -----------------------
Sub serial1_Connected (sukces jako wartość logiczna)
Okno postępuUkryj

Jeśli sukces to
ShowMessageAsync("Połączono pomyślnie BT", "Informacja")
podłączony = Prawda

Jeśli ast.IsInitialized Następnie ast.Close
ast.Initialize(Me, "ast", serial1.InputStream, serial1.OutputStream)
W przeciwnym razie
podłączony = Fałsz
ShowMessageAsync("Problem z połączeniem", "Błąd")
Zakończ jeśli

włącz_kontrole (połączony)
Napis końcowy

'-------------------------------- Obsługa rozpoznawania głosu - rozpoznawanie głosu -----
Sub vr_Result (sukces jako wartość logiczna, teksty jako lista)
Jeśli sukces to
Jeśli jest podłączony
Dim str Jako ciąg
str = Teksty.Get(0)
ast.Write(str i Chr(13) i Chr(10))
Zakończ jeśli
Zakończ jeśli
Napis końcowy

'---------------------- Obsługa zdarzeń strumieniowania --------------
Sub ast_NewText (tekst jako ciąg znaków)
edtLog.Text = Tekst
tts.Speak(tekst, fałsz)
Napis końcowy

Sub ast_Zakończony
ShowMessageAsync("Połączenie zerwane!", "Informacja")
Napis końcowy

'--------- Funkcje użytkowe ogólne ------------
Sub Enable_controls (onoff jako wartość logiczna)
btnSend.Enabled = wł.wył
edtText.Enabled = wł.wył
edtLog.Enabled = wł.wył

btnConnect.Enabled = Nie(wł.wył.)
btnSearch.Enabled = Nie(wł.wył.)
btnDisconnect.Enabled = wł.wył

Jeśli wł.wył. Następnie
Activity.Title = "ATNEL BT (połączono)"
btnSend.TextColor = Kolory.Cyjan
btnDisconnect.TextColor = Kolory.Czerwony
btnConnect.TextColor = Kolory.Szary
btnSearch.TextColor = Kolory.Szary
W przeciwnym razie
Activity.Title = "ATNEL BT (brak połączenia)"
btnSend.TextColor = Kolory.Szary
btnDisconnect.TextColor = Kolory.Szary
btnConnect.TextColor = 0xff00ff00
btnSearch.TextColor = 0xffff00ff
Zakończ jeśli
Napis końcowy

'----------------- Procedura obsługi klawiszy ----------------
Sub btnSend_Click
Jeśli jest podłączony
Jeśli edtText.Text = "" To
vr.Prompt = "Powiedz coś"
vr.Słuchaj
Powrót
Zakończ jeśli

ast.Write(edtText.Text i Chr(13) i Chr(10))
edtText.Text = ""
edtText.RequestFocus
Zakończ jeśli
Napis końcowy

Sub btnConnect_Click
Przyciemnij sparowane urządzenia jako mapę
sparowane urządzenia = serial1.GetPairedDevices
Przyciemnij IL jako lista
IL.Initialize
Dla i = 0 Do sparowanych urządzeń.Rozmiar - 1
IL.Add(pairedDevices.GetKeyAt(i))
Następny
Przyciemnienie Jak Int
res = ListaWejściowa(IL, "Wybierz urządzenie", -1)
Jeśli res <> DialogResponse.CANCEL Następnie
serial1.Connect(pairedDevices.Get(IL.Get(res)))
Zakończ jeśli
Napis końcowy

Sub btnSearch_Click
znalezionoDevices.Initialize
Jeśli admin.StartDiscovery = False To
ShowMessageAsync("Błąd wyszukiwania urządzeń BT!", "Błąd")
W przeciwnym razie
ShowMessageAsync("Poszukiwanie urządzeń BT...", "Informacja")
Zakończ jeśli
Napis końcowy

Sub btnDisconnect_Click
Jeśli ast.IsInitialized Następnie ast.Close
serial1.Rozłącz
edtText.Text = ""
edtLog.Text = ""

podłączony = Fałsz
włącz_kontrole (fałsz)
Napis końcowy

Sub Activity_PermissionResult (zezwolenie jako ciąg znaków, wynik jako wartość logiczna)
Jeśli wynik = fałsz, to
ShowMessageAsync("Nie przyznano pozwolenia: " & Permission, "Błąd")
Zakończ jeśli
Napis końcowy

'-------------------------------- Metody asynchroniczne dla wiadomości ----------------
Sub ShowMessageAsync (wiadomość jako ciąg, tytuł jako ciąg)
dialog.Initialize(Aktywność)
Czekaj na (dialog.Show(Wiadomość, Tytuł, „”, „OK”)) Ukończono (wynik jako int)
Napis końcowy

' wersja: 1.00
' Moduł klasy
Podklasa_Globals
Prywatny mTarget jako obiekt
Prywatna nazwa mEventName jako ciąg
Prywatne astreamy Jako AsyncStreams
Publiczny zestaw znaków jako ciąg = „UTF8”
Prywatny sb jako StringBuilder
Napis końcowy

Publiczna inicjalizacja podrzędna (Moduł docelowy jako obiekt, nazwa zdarzenia jako ciąg znaków, wejście jako strumień wejściowy, wyjście jako strumień wyjściowy)
mTarget = Moduł docelowy
mNazwaZdarzenia = NazwaZdarzenia
astreams.Initialize(In, out, „astreams”)
sb.Initialize
Napis końcowy

„Wysyła SMS-a. Konieczne jest, że ta metoda nie dodaje znaku końca linii.
Publiczny zapis subskrypcyjny (tekst jako ciąg znaków)
astreams.Write(Text.GetBytes(zestaw znaków))
Napis końcowy

Prywatny sub astreams_NewData(Buffer() jako bajt)
Wymiar newDataStart As Int = sb.Length
sb.Append(BytesToString(Bufor, 0, Bufor.Długość, zestaw znaków))
Dim s As String = sb.ToString
Przyciemnienie startu jako Int = 0
Dla i = newDataStart To s.Length - 1
Dim c As Char = s.CharAt(i)
Jeśli i = 0 ic = Chr(10) Do „\n...
start = 1 'może być przerwanym znakiem końca linii
Kontynuować
Zakończ jeśli
Jeśli c = Chr(10) Do „\n
CallSubDelayed2(mTarget, mEventName & „_NewText”, s.SubString2(start, i))
początek = ja + 1
Inaczej Jeśli c = Chr(13) Do „\r
CallSubDelayed2(mTarget, mEventName & „_NewText”, s.SubString2(start, i))
Jeśli i < s.Length - 1 And s.CharAt(i + 1) = Chr(10) zbiornik '\r\n
ja = ja + 1
Zakończ jeśli
początek = ja + 1
Zakończ jeśli
Następny
Jeśli start > 0 należy sb.Remove(0, start)
Napis końcowy

Prywatna subskrypcja astreams_Zakończona
CallSubDelayed(mTarget, mEventName i „_Zakończony”)
Napis końcowy

Prywatny sub astreams_Error
Log("błąd: " & LastException)
astreams.Zamknij
CallSubDelayed(mTarget, mEventName i „_Zakończony”)
Napis końcowy

Publiczna subskrypcja niedostępna
astreams.Zamknij
Napis końcowy

#Event: NewText (tekst jako ciąg znaków)
#Wydarzenie: Zakończone

' wersja: 1.00
' Moduł klasy
Podklasa_Globals
Prywatny mTarget jako obiekt
Prywatna nazwa mEventName jako ciąg
Prywatne strumienie Jako AsyncStreams
Publiczny zestaw znaków jako ciąg = „UTF8”
Prywatny sb jako StringBuilder
Napis końcowy

Publiczna inicjalizacja podrzędna (Moduł odprowadzania jako obiekt, nazwa wyniku jako ciąg znaków, wejście jako wyjście, wyjście jako wyjście wyjściowe)
mTarget = Moduł zabezpieczający
mNazwaZdarzenia = NazwaZdarzenia
astreams.Initialize(In, out, „astreams”)
sb.Initialize
Napis końcowy

„Wysyła SMS-a. Konieczne jest, że ta metoda nie dodaje znaku końca linii.
Publiczny zapis subskrypcyjny (tekst jako ciąg znaków)
astreams.Write(Text.GetBytes(zestaw znaków))
Napis końcowy

Prywatny sub astreams_NewData(Buffer() jako bajt)
Wymiar newDataStart As Int = sb.Length
sb.Append(BytesToString(Bufor, 0, Bufor.Długość, zestaw znaków))
Dim s As String = sb.ToString
Przyciemnienie startu jako Int = 0
Dla i = newDataStart To s.Length - 1
Dim c As Char = s.CharAt(i)
Jeśli i = 0 ic = Chr(10) Do „\n...
start = 1 'może być przerwanym znakiem końca linii
Kontynuować
Zakończ jeśli
Jeśli c = Chr(10) Do „\n
CallSubDelayed2(mTarget, mEventName & „_NewText”, s.SubString2(start, i))
początek = ja + 1
Inaczej Jeśli c = Chr(13) Do „\r
CallSubDelayed2(mTarget, mEventName & „_NewText”, s.SubString2(start, i))
Jeśli i < s.Length - 1 And s.CharAt(i + 1) = Chr(10) zbiornik '\r\n
ja = ja + 1
Zakończ jeśli
początek = ja + 1
Zakończ jeśli
Następny
Jeśli start > 0 należy sb.Remove(0, start)
Napis końcowy

Prywatna subskrypcja astreams_Zakończona
CallSubDelayed(mTarget, mEventName i „_Zakończony”)
Napis końcowy

Prywatny sub astreams_Error
Log("błąd: " & LastException)
astreams.Zamknij
CallSubDelayed(mTarget, mEventName i „_Zakończony”)
Napis końcowy

Publiczna subskrypcja niedostępna
astreams.Zamknij
Napis końcowy
 

luki_c

Member
Użyj znaczników <code> bo tego rozczytać się nie da i opisz dokładnie problem bo skąd mamy wiedzieć co jest nie tak? Aha i kod programu w oryginale a nie przetłumaczony.
 
Top