2016-03-22 24 views
1

ブルートゥースを有効にして近くのデバイスのリストを表示しましたが、リストに表示されているデバイスをクリックするたびにアプリケーションが終了します。以下のコード付き)だけで(あなたの実行を置き換える誰かがこの問題に答える場合ブルートゥースデバイスに接続できません

package com.android.clickandsend; 

import java.io.IOException; 
import java.util.Set; 
import java.util.UUID; 







import android.app.Activity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothServerSocket; 
import android.bluetooth.BluetoothSocket; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class Bluetooth extends Activity{ 
final BroadcastReceiver bReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      // When discovery finds a device 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
       // Get the BluetoothDevice object from the Intent 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       // add the name and the MAC address of the object to the arrayAdapter 
       BTArrayAdapter.add(device.getName()); 
       BTArrayAdapter.notifyDataSetChanged(); 
      } 
     } 
    }; 
private static final int REQUEST_ENABLE_BT = 1; 
public static BluetoothAdapter myBluetoothAdapter; 
private ListView myListView; 
public final static UUID my_UUID = UUID.fromString("00001802-0000-1000-8000-00805f9b34fb"); 
private ArrayAdapter<String> BTArrayAdapter; 
private Set<BluetoothDevice> pairedDevices; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.bluetooth); 
    myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    Button b=(Button)findViewById(R.id.button1); 
    if(myBluetoothAdapter == null){ 
     Toast.makeText(getApplicationContext(),"Your device does not support Bluetooth", 
       Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
    else { 
     if (!myBluetoothAdapter.isEnabled()) { 
      Intent turnOnIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(turnOnIntent, REQUEST_ENABLE_BT); 

      Toast.makeText(getApplicationContext(),"Bluetooth turned on" , 
        Toast.LENGTH_LONG).show(); 
      } 
      else{ 
      Toast.makeText(getApplicationContext(),"Bluetooth is already on", 
        Toast.LENGTH_LONG).show(); 
      } 
    } 
    myListView=(ListView)findViewById(R.id.listView1); 

    BTArrayAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 

    myListView.setAdapter(BTArrayAdapter); 



    b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


        if (myBluetoothAdapter.isDiscovering()) { 
         // the button is pressed when it discovers, so cancel the discovery 
         myBluetoothAdapter.cancelDiscovery(); 
         Toast.makeText(getApplicationContext(), "cancel dis", Toast.LENGTH_SHORT).show(); 
        } 
        else { 
         BTArrayAdapter.clear(); 
         myBluetoothAdapter.startDiscovery(); 
         Toast.makeText(getApplicationContext(), "start dis", Toast.LENGTH_SHORT).show(); 
         registerReceiver(bReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));  
        } 





      myListView.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
        String itemValue = (String) myListView.getItemAtPosition(position); 

         String MAC = itemValue.substring(itemValue.length() - 17); 

         BluetoothDevice bluetoothDevice = myBluetoothAdapter.getRemoteDevice(MAC); 
         ConnectingThread t = new ConnectingThread(bluetoothDevice); 
         t.start(); 
        } 
      }); 
     } 
    }); 
    Button c=(Button)findViewById(R.id.button2); 
    c.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      ListeningThread t = new ListeningThread(); 
      t.start(); 
     } 
    }); 

} 




@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    unregisterReceiver(bReceiver); 
} 

    } 
    class ConnectingThread extends Thread { 
private final BluetoothSocket bluetoothSocket; 
private final BluetoothDevice bluetoothDevice; 


public ConnectingThread(BluetoothDevice device) { 

    BluetoothSocket temp = null; 
    bluetoothDevice = device; 

    // Get a BluetoothSocket to connect with the given BluetoothDevice 
    try { 
     temp = bluetoothDevice.createRfcommSocketToServiceRecord(Bluetooth.my_UUID); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    bluetoothSocket = temp; 
} 

public void run() { 
    Bluetooth.myBluetoothAdapter.cancelDiscovery(); 
    // Cancel any discovery as it will slow down the connection 


    try { 
     // This will block until it succeeds in connecting to the device 
     // through the bluetoothSocket or throws an exception 
     bluetoothSocket.connect(); 
    } catch (IOException connectException) { 
     connectException.printStackTrace(); 
     try { 
      bluetoothSocket.close(); 
     } catch (IOException closeException) { 
      closeException.printStackTrace(); 
     } 
    } 

    // Code to manage the connection in a separate thread 
    /* 
     manageBluetoothConnection(bluetoothSocket); 
    */ 
} 

// Cancel an open connection and terminate the thread 
public void cancel() { 
    try { 
     bluetoothSocket.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 
class ListeningThread extends Thread { 
private final BluetoothServerSocket bluetoothServerSocket; 
private final static UUID uuid = UUID.fromString("00001802-0000-1000-8000-00805f9b34fb"); 
String name="help"; 
public ListeningThread() { 
    BluetoothServerSocket temp = null; 
    try { 
     temp = Bluetooth.myBluetoothAdapter.listenUsingRfcommWithServiceRecord(name, uuid); 

    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
     bluetoothServerSocket = temp; 
} 

public void run() { 
    BluetoothSocket bluetoothSocket; 
    // This will block while listening until a BluetoothSocket is returned 
    // or an exception occurs 
    while (true) { 
     try { 
      bluetoothSocket = bluetoothServerSocket.accept(); 
     } catch (IOException e) { 
      break; 
     } 
     // If a connection is accepted 
     if (bluetoothSocket != null) { 

      Toast.makeText(getApplicationContext(), "A connection has been accepted.", 
        Toast.LENGTH_SHORT).show(); 
      break; 
     } 
      // Manage the connection in a separate thread 

      try { 
       bluetoothServerSocket.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      break; 
     } 
    } 


private Context getApplicationContext() { 
    // TODO Auto-generated method stub 
    return null; 
} 

// Cancel the listening socket and terminate the thread 
public void cancel() { 
    try { 
     bluetoothServerSocket.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 
+1

logcatエラーメッセージを投稿できますか? – Raghavendra

答えて

0

問題は、それは本当に参考になるかを把握することはできません、問題はあなたがそのかもしれない特定のデバイスを接続しようとしたときのようなものです既にいくつかの周辺機器に接続されているので、最初に切断する必要があります。これを試してみてください。

try { 

    bluetoothSocket.close(); 
    bluetoothSocket.disconnect(); 
    bluetoothSocket.connect(); 
} catch (IOException connectException) { 
    connectException.printStackTrace(); 
    try { 
     bluetoothSocket.close(); 
    } catch (IOException closeException) { 
     closeException.printStackTrace(); 
    } 
} 
+0

いいえ、同じエラーが表示されます –

関連する問題