2012-04-02 7 views
2

こんにちは、これは私の最初の質問です。 私はミスをするのであれば申し訳ありません。(私はトラブルコードブ​​ロック内の私のbluetoothclassからコードを取得したのです。どのように私は20分を費やすことなく、これを修正するか貼り付けをコピー?)Bluetooth Androidアプリケーションに関する問題。初心者

私が午前問題は、5月のアンドロイドであります応用。

これは私の学校のプロジェクトです。私は2ヶ月前にアンドロイドを学び始めました。

私は自分のクラスを作成しました。これは、Bluetoothのシェルの一種です。 (基本的に私はブルートゥースの仕組みを学びます)。

私は1つのテスト用のアクティビティ、1クラスのbluetooh(私のシェル)を持っています。 アンドロイドデベロッパーの例に続いて3つのスレッドがあります。 android bluetooth basics

サーバーとして機能するAcceptedthreadがあります。 AcceptThreadと接続できるConnectThreadです。 接続すると、bluetoohsocketを取得します。 このBluetoothソケットでは、両方のデバイスがこのソケットでConnectedthreadを開始します。 AccapthreadとConnectThreadを閉じる。

私はいくつか問題があります。

  1. 私は接続してテストメッセージを送信できます。 1台のデバイスからはバグが出る前に3回しか送信できません。他のデバイスは、必要な数のメッセージを受け入れることができます(動作します)。

2.If iデバイスaからb /にメッセージを送信し、bからa /に1を送信すると、通常は時にはうまく動作しません。バグアウトしてアプリケーションを終了する前に。

3.私は物事をより良くする方法について全面的なアドバイスをします。私は非常にばかげた何かをしたら私をばかだと呼んでください。私はこの種のプログラミングには非常に新しいです。

以下はコードです。

AcceptThread:

public class AcceptThread extends Thread { 
private final BluetoothServerSocket mmServerSocket; 
private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66"); 
private Handler mHandler; 
private Bleutooth BT; 
public AcceptThread(BluetoothAdapter Adapter,Handler handler,Bleutooth bt) { 
    // Use a temporary object that is later assigned to mmServerSocket, 
    // because mmServerSocket is final 
    mHandler = handler; 
    BT = bt; 
    BluetoothServerSocket tmp = null; 
    try { 
     // MY_UUID is the app's UUID string, also used by the client code 
     tmp = Adapter.listenUsingRfcommWithServiceRecord("menno/ruben/app",MY_UUID); 

    } catch (IOException e) { } 
    mmServerSocket = tmp; 
} 

public void run() { 
    Log.d("AcceptThreadlog","Accepthread Run Gestart"); 
    BluetoothSocket socket = null; 
    // Keep listening until exception occurs or a socket is returned 
    while (true) { 
     try { 
      socket = mmServerSocket.accept(); 
     } catch (IOException e) { 
      break; 
     } 
     // If a connection was accepted 
     if (socket != null) { 
      Log.d("AcceptThreadlog","ConnectedThread Gestart"); 
      ConnectedThread mConnectedThread = new ConnectedThread(socket,mHandler); 
      mConnectedThread.start(); 
      BT.HoldConnectThread(mConnectedThread); 
      try { 
       mmServerSocket.close(); 
      } catch (IOException e) { 

       Log.d("AcceptThreadlog","ServerSocket close throwed IOexception"); 
      } 
      break; 
     } 
    } 
} 

/** Will cancel the listening socket, and cause the thread to finish */ 
public void cancel() { 
    try { 
     mmServerSocket.close(); 
    } catch (IOException e) { } 
} 

ConnectThread:

public class ConnectThread extends Thread { 
private final BluetoothSocket mmSocket; 
private final BluetoothDevice mmDevice; 
BluetoothAdapter adapter; 
private Handler mHandler; 
private Bleutooth BT; 
private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66"); 
public ConnectThread(BluetoothDevice device,BluetoothAdapter adapter,Handler handler,Bleutooth bt) { 
    // Use a temporary object that is later assigned to mmSocket, 
    // because mmSocket is final 
    BT = bt; 
    mHandler = handler; 
    BluetoothSocket tmp = null; 
    mmDevice = device; 
    // Get a BluetoothSocket to connect with the given BluetoothDevice 
    try { 
     // MY_UUID is the app's UUID string, also used by the server code 

     tmp = device.createRfcommSocketToServiceRecord(MY_UUID); 
    } catch (IOException e) { } 
    mmSocket = tmp; 
} 

public void run() { 
    Log.d("ConnectThread","Run gestart"); 
    // Cancel discovery because it will slow down the connection. 
    if (adapter != null) { adapter.cancelDiscovery();}; 

    try { 
     // Connect the device through the socket. This will block 
     // until it succeeds or throws an exception 
     mmSocket.connect(); 
    } catch (IOException connectException) { 
     // Unable to connect; close the socket and get out 
     try { 
      mmSocket.close(); 
     } catch (IOException closeException) { Log.d("ConnectThread","IOexception opgetreden socket.close"); } 

    } 

    // Do work to manage the connection (in a separate thread) 
    Log.d("ConnectThread","ConnectedThread Gestart"); 
    ConnectedThread mConnectedThread = new ConnectedThread(mmSocket,mHandler); 
    mConnectedThread.start(); 
    BT.HoldConnectThread(mConnectedThread); 
} 

/** Will cancel an in-progress connection, and close the socket */ 
public void cancel() { 
    try { 
     mmSocket.close(); 
    } catch (IOException e) { } 
} 

ConnectedThread:

public class ConnectedThread extends Thread { 
private final BluetoothSocket mmSocket; 
private final InputStream mmInStream; 
private final OutputStream mmOutStream; 
private Handler mHandler; 
public ConnectedThread(BluetoothSocket socket,Handler handler) 
{ 
    mHandler = handler; 
    mmSocket = socket; 
    InputStream tmpIn = null; 
    OutputStream tmpOut = null; 
    // Get the input and output streams, using temp objects because 
    // member streams are final 
    try { 
     tmpIn = socket.getInputStream(); 
     tmpOut = socket.getOutputStream(); 
    } catch (IOException e) { } 

    mmInStream = tmpIn; 
    mmOutStream = tmpOut; 
} 

public void run() { 
    byte[] buffer = new byte[1024]; // buffer store for the stream 
    int bytes; // bytes returned from read() 
    Message message = Message.obtain(mHandler); 
    // Keep listening to the InputStream until an exception occurs 
    // Bevestiging verbinding 
    Log.d("ConnectedThread","YES !!!!!!!!!"); 
    message.what = 1; 
    message.arg1 = 1; 
    mHandler.sendMessage(message); 
    while (true) { 
     try { 

      // Read from the InputStream 
      bytes = mmInStream.read(buffer); 
      message.what = 1; 
      message.arg1 = 2; 
      String Test = new String(buffer); 
      Bundle bundle = new Bundle(); 
      bundle.putString("test",Test); 
      message.setData(bundle); 
      mHandler.sendMessage(message); 

     } catch (IOException e) { 
      break; 
     } 
    } 
} 
    public void write(byte[] bytes) { 
    try { 
     mmOutStream.write(bytes); 
    } catch (IOException e) { } 
} 

public void cancel() { 
    try { 
     mmSocket.close(); 
    } catch (IOException e) { } 
} 

TestActivity:

public class BleutoothProftaakActivity extends Activity { 
/** Called when the activity is first created. */ 
    private Bleutooth BT; 
    private Handler mHandler; 
    ConnectedThread Connection = null; 
@Override 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mHandler = new Handler() { 
     @Override 
synchronized public void handleMessage(Message msg) 
     { 
      if (msg.arg1 == 1 && msg.what == 1) 
      { 
      Toast T = Toast.makeText(getBaseContext(),"Verbinding gemaakt",10000); 
      T.show(); 
      return; 
      } 
      if (msg.arg1 == 2 && msg.what == 1) 
      { 
      Bundle b = msg.getData(); 
      String message = b.getString("test"); 
      Toast T = Toast.makeText(getBaseContext(),message,10000); 
      T.show(); 
      return; 
      } 
     } 


}; 

    BT = new Bleutooth(this); 
    Button button = (Button) findViewById(R.id.button1); 
    button.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){    
      Toast T = Toast.makeText(getBaseContext(),BT.CheckBleutoothStatus(),10000); 
      T.show(); 
     } 
    }); 
    Button button2 = (Button) findViewById(R.id.button2); 
    button2.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){    
      BT.TurnBleutoothOn(); 
     } 
    }); 
    Button button3 = (Button) findViewById(R.id.button3); 
    button3.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) 
     {   
     BT.DiscoverDevices(); 
     } }); 
    Button button9 = (Button) findViewById(R.id.button9); 
    button9.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
     ArrayList<String> devicesfound = BT.GetFoundDevices(); 
     if (devicesfound.isEmpty()) 
     { 
      Toast T = Toast.makeText(getBaseContext(),"Geen Devices Gevonden",10000); 
      T.show(); 
     } 
     else 
     { 
      for (int i = 0 ;i<devicesfound.size();i++) 
      { 
       Toast T = Toast.makeText(getBaseContext(),devicesfound.get(i),10000); 
       T.show(); 
      } 
     } 
     } 
    }); 
    Button button5 = (Button) findViewById(R.id.button5); 
    button5.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){    
      ArrayList<String> devicesfound = BT.ReturnBondedDevices(); 
      if (devicesfound.isEmpty()) 
      { 
       Toast T = Toast.makeText(getBaseContext(),"Er zijn geen bonded devices",10000); 
       T.show(); 
      } 
      else 
      { 
       for (int i = 0 ;i<devicesfound.size();i++) 
       { 
        Toast T = Toast.makeText(getBaseContext(),devicesfound.get(i),10000); 
        T.show(); 
       } 
      } 
     } 
    }); 
    Button button6 = (Button) findViewById(R.id.button6); 
    button6.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      BT.SetDiscoverable(); 
     } 
    }); 
    Button button7 = (Button) findViewById(R.id.button7); 
    button7.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      BT.StartServerSideConnection(mHandler); 
     } 
    }); 
    Button button8 = (Button) findViewById(R.id.button8); 
    button8.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      BluetoothAdapter adapter = BT.GetAdapter(); 
      ArrayList<String>devices = BT.ReturnBondedDevices(); 
      BluetoothDevice adress = adapter.getRemoteDevice(devices.get(0)); 
      BT.StartClientSideConnection(adress,mHandler); 
     } 
    }); 
    Button button4 = (Button) findViewById(R.id.button4); 
    button4.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      Connection = BT.ReturnConnectedThread(); 
      if (Connection == null) 
      { 
       Toast T = Toast.makeText(getBaseContext(),"Er is geen verbinding",10000); 
       T.show(); 
      } 
      else 
      { 
       String Test = "TESTESTTEST JIppie!!!!!"; 
       byte[] bytearray = Test.getBytes(); 
       Connection.write(bytearray); 
      } 
     } 
    }); 

} 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    BT.CleanUp(); 
} 

私のBluetoothクラス:

public class Bleutooth 
{ 

BluetoothAdapter adapter; 
Activity main; 
BroadcastReceiver receiver; 
ArrayList<String> founddevices; 
boolean receiverRegistered; 
AcceptThread mAcceptThread= null; 
ConnectThread mConnectThread = null; 
ConnectedThread mConnectedThread = null; 


public Bleutooth(Activity Main) 
{ 
adapter = BluetoothAdapter.getDefaultAdapter(); 
main = Main; 
receiverRegistered = false; 
founddevices = new ArrayList<String>(); 

} 
public BluetoothAdapter GetAdapter(){ 
return adapter; 
} 
public void StartServerSideConnection(Handler handler){ 
// Cancel any thread attempting to make a connection 
if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;} 

// Cancel any thread currently running a connection 
if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;} 

// Start the thread to listen on a BluetoothServerSocket 
if (mAcceptThread == null) { 
    mAcceptThread = new AcceptThread(adapter,handler,this); 
    mAcceptThread.start(); 
} 

} 
public void StartClientSideConnection(BluetoothDevice device,Handler handler){ 
//Cancel any thread attempting to make a connection 
if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;} 

// Cancel any thread currently running a connection 
if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;} 

// Start the thread to listen on a BluetoothServerSocket 
if (mConnectThread == null) { 
    mConnectThread = new ConnectThread(device,adapter,handler,this); 
    mConnectThread.start(); 
} 

} 
public void SetDiscoverable(){ 
Intent discoverableIntent = 
new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 
main.startActivity(discoverableIntent); 
} 
public String CheckBleutoothStatus(){ 
String returnString; 
if (adapter == null) 
{ 
returnString = "Geen bleutooth ondersteund"; 
} 
else if(adapter.isEnabled()) 
{ 
    returnString = "Bleutooth staat aan"; 
} 
else 
{ 
    returnString = "Bleutooth staat uit"; 
} 
return returnString; 
} 
public void TurnBleutoothOn(){ 
int REQUEST_ENABLE_BT = 1; 
if (!adapter.isEnabled()) 
{ 
    Intent enableBtIntent = new Intent(adapter.ACTION_REQUEST_ENABLE); 
    main.startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT);  
} 
} 

public ArrayList<String> ReturnBondedDevices() { 
ArrayList<String> BondedDevices = new ArrayList<String>(); 
Set<BluetoothDevice> pairedDevices = adapter.getBondedDevices(); 
// If there are paired devices 
if (pairedDevices.size() > 0) { 
    // Loop through paired devices 
    for (BluetoothDevice device : pairedDevices) { 
     // Add the name and address to an array adapter to show in a ListView 
     BondedDevices.add(device.getAddress());   
    } 

} 
return BondedDevices; 
} 
public void DiscoverDevices(){ 
adapter.startDiscovery(); 
// Create a BroadcastReceiver for ACTION_FOUND 
    receiver = new BroadcastReceiver() 
    { 
    public void onReceive(Context context, Intent intent) 
    {   
     String action = intent.getAction(); 
     // When discovery finds a device 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) 
     { 
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

founddevices.add(device.getName() + "\n" + device.getAddress()); 
Toast T = Toast.makeText(main.getBaseContext(),"BleutoothDevice Gevonden",10000); 
      T.show(); 
     } 
    } 
}; 
// Register the BroadcastReceiver 
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
main.registerReceiver(receiver, filter); 
receiverRegistered = true; 
} 
public ArrayList<String> GetFoundDevices(){  
return founddevices;  
} 
public void CleanUp(){ System.gc(); 
if (receiverRegistered) 
{ 
    main.unregisterReceiver(receiver); 
} 
if (mConnectedThread != null) 
{ 
mConnectedThread.cancel(); 
} 
adapter.cancelDiscovery(); 
System.gc(); 
} 
public void HoldConnectThread(ConnectedThread mConnectedThread){ 
this.mConnectedThread = mConnectedThread; 
} 
public ConnectedThread ReturnConnectedThread(){ 
if (this.mConnectedThread != null) 
{ 
    return mConnectedThread; 
} 
else {return null;} 
} 

答えて

0

私はすでに答えを見つけました。

私は同じメッセージを何度も繰り返し使用していました。 messagequeはそれを好まなかった。

魅力のように動作するたびに新しいメッセージを作成することで問題を解決しました。

馬鹿のような気分...

関連する問題