Aplikacja nie ma nic złego robić.
Ma mieć za zadanie włączyć bt. połączyć się z modułem bt podłączonym do AVR(na razie chcę żeby się połączył z bt w moim laptopie), wysłania ciągu znaków(które AVR po odbiorze ma odpowiednio zinterpretować) a następnie ma się rozłączyć i wyłączyć moduł bt. Apki będę raczej głownie ja używał może jeszcze jeden znajomy i moim zdaniem, dodatkowe klikanie na potwierdzenie włączenia będzie nieco irytujące i wolałbym tego unikać.
Udało mi się pokonać ten problem. Wszystkiemu była winna literówka w
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
było permisdion zamiast permission.
Jednak teraz mam kolejny problem.
Dopisałem funkcje odpowiedzialne za połączenie z bt.
W linijce btdevice = btAdapter.getRemoteDevice("40861B:EB"); wpisałem adres MAC bluetooth który odczytałem z programu BlueSoleil.
Kod z mainactivity.java
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.app.Activity;
import android.os.Handler;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
public class MainActivity extends Activity {
//Obiekty odpowiedzialne za bluetooth
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice btdevice;
BluetoothSocket btsocket;
UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
private OutputStream os; // Strumień wyjsciowy odpowiedzialny za wysyłanie danych
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setButton();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/*
public void BClick1(View view){
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
btAdapter.enable();
}
*/
private void setButton(){
Button przycisk1 = (Button) findViewById(R.id.button);
przycisk1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
btAdapter.enable();
}
});
Button przycisk2 =(Button) findViewById(R.id.button2);
przycisk2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// btAdapter.disable();
InitBT();
makeToast("inicjalizacja");
}
});
Button przycisk3 = (Button) findViewById(R.id.button3);
przycisk3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
polaczBT();
makeToast("Kanpai!");
}
});
}
private void InitBT(){
//Ustawienie adresu MAC urządzenia z którym ma się połączyć aplikacja
btdevice = btAdapter.getRemoteDevice("40:61:86:A0:1B:EB");
}
private void polaczBT(){
try{
btsocket = btdevice.createInsecureRfcommSocketToServiceRecord(MY_UUID);
btsocket.connect();
if(btsocket.isConnected())
makeToast("działa");
else
makeToast("nie działa");
}catch(IOException e){
makeToast("Błąd połączenia: " + e);
}
}
private void makeToast(String s){
Toast t = Toast.makeText(this, s, Toast.LENGTH_LONG);
t.show();
}
}
Klikam pierwszy przycisk, włącza się moduł bluetooth.
Klikam drugi pojawia się napis inicjalizacja
Gdy klikam na trzeci przycisk to po chwili pojawia mi się
*błąd połączenia java.io.ioexception: read failed, socket might closed or timeout, read ret: -1 *
btdevice jak wyświetliłem to pokazuje mac bt laptopa. A pod btsocket kryje się android.bluetooth.bluetoothsocket@41c65e52 (ta końcówka po @ zmienia się).
Czyżbym zapomniał o czymś?