Android代码IOException中的Android和Arduino蓝牙Comunication错误

时间:2016-01-13 13:52:40

标签: java c# android bluetooth ioexception

我一直在尝试通过蓝牙在android和arduino之间进行通信,但每当我构建android时,它都会给我带来这个错误,而不是" C"功能和错误说

  

错误:(91,22)错误:未报告的异常IOException;必须抓住   或宣布被抛出

请帮助我,我被困住了

$    
package com.example.administrator.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Bundle;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import java.util.Set;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStream;
import android.os.ParcelUuid;





public class MainActivity extends AppCompatActivity {

private static final int REQUEST_ENABLE_BT = 1;
private Button onBtn, offBtn ,listBtn ,findBtn;
private TextView text;

private Button UpBtn ,DownBtn ,LeftBtn ,RightBtn;

private BluetoothAdapter myBluetoothAdapter;
private Set<BluetoothDevice> pairedDevices;
private ListView myListView;
private ArrayAdapter<String> BTArrayAdapter;
private OutputStream outputStream;
private InputStream inStream;


protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // take an instance of BluetoothAdapter - Bluetooth radio
    myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    Set<BluetoothDevice> bondedDevices = myBluetoothAdapter.getBondedDevices();

    if (myBluetoothAdapter == null) {
        onBtn.setEnabled(false);
        offBtn.setEnabled(false);
        listBtn.setEnabled(false);
        findBtn.setEnabled(false);
        UpBtn.setEnabled(false);
        DownBtn.setEnabled(false);
        LeftBtn.setEnabled(false);
        RightBtn.setEnabled(false);
        text.setText("Status: not supported");

        Toast.makeText(getApplicationContext(), "Your device does not support Bluetooth",
                Toast.LENGTH_LONG).show();
    } else {

        if(bondedDevices.size() > 0){
            BluetoothDevice[] devices = (BluetoothDevice[]) bondedDevices.toArray();
            BluetoothDevice device = devices[0];
            ParcelUuid[] uuids = device.getUuids();
            BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuids[0].getUuid());
            socket.connect();
            outputStream = socket.getOutputStream();
            inStream = socket.getInputStream();
        }




        //Movement
        UpBtn = (Button) findViewById(R.id.Upbutton);
        DownBtn = (Button) findViewById(R.id.Downbutton);
        LeftBtn = (Button) findViewById(R.id.Leftbutton);
        RightBtn = (Button) findViewById(R.id.Rightbutton);

        UpBtn.setOnClickListener(new OnClickListener()  {
            @Override public void onClick(View v)  {
                C(v,8) ; //error here


            }
        });

        DownBtn.setOnClickListener(new OnClickListener() {
            @Override public void onClick(View v)  {
                C(v, 2);


            }
        });

        LeftBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v)  {
                C(v, 4);


            }
        });

        RightBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v){
                C(v,6);
            }
        });

        //.........................
        //..................
        //Normal Code
        text = (TextView) findViewById(R.id.textView);
        onBtn = (Button) findViewById(R.id.Onbutton);
        onBtn.setOnClickListener(new OnClickListener() {

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

        offBtn = (Button) findViewById(R.id.Offbutton);
        offBtn.setOnClickListener(new OnClickListener() {

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

        listBtn = (Button) findViewById(R.id.Listbutton);
        listBtn.setOnClickListener(new OnClickListener() {

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

        findBtn = (Button) findViewById(R.id.Pairedbutton);
        findBtn.setOnClickListener(new OnClickListener() {

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

        myListView = (ListView) findViewById(R.id.listView1);

        // create the arrayAdapter that contains the BTDevices, and set it to the ListView
        BTArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        myListView.setAdapter(BTArrayAdapter);
    }
}

public void on(View view) {
    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();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    if (requestCode == REQUEST_ENABLE_BT) {
        if (myBluetoothAdapter.isEnabled()) {
            text.setText("Status: Enabled");
        } else {
            text.setText("Status: Disabled");
        }
    }
}

public void list(View view) {
    // get paired devices
    pairedDevices = myBluetoothAdapter.getBondedDevices();

    // put it's one to the adapter
    for (BluetoothDevice device : pairedDevices)
        BTArrayAdapter.add(device.getName() + "\n" + device.getAddress());

    Toast.makeText(getApplicationContext(), "Show Paired Devices",
            Toast.LENGTH_SHORT).show();

}

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() + "\n" + device.getAddress());
            BTArrayAdapter.notifyDataSetChanged();
        }
    }
};

public void find(View view) {
    if (myBluetoothAdapter.isDiscovering()) {
        // the button is pressed when it discovers, so cancel the discovery
        myBluetoothAdapter.cancelDiscovery();
    } else {
        BTArrayAdapter.clear();
        myBluetoothAdapter.startDiscovery();

        registerReceiver(bReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
    }
}

public void off(View view) {
    myBluetoothAdapter.disable();
    text.setText("Status: Disconnected");

    Toast.makeText(getApplicationContext(), "Bluetooth turned off",
            Toast.LENGTH_LONG).show();
}

public void C (View View , float H) throws IOException{
       if(H == 8){

                outputStream.write("8".toString().getBytes());
       }
       if(H == 2){
                 outputStream.write("2".toString().getBytes());
       }
       if(H == 4){
                 outputStream.write("4".toString().getBytes());
       }
       if(H == 6){
                 outputStream.write("6".toString().getBytes());
       }

}


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

}
$

1 个答案:

答案 0 :(得分:0)

您需要添加try / catch块:

UpBtn.setOnClickListener(new OnClickListener()  {
        @Override public void onClick(View v)  {
          try{
            C(v,8) ; //error here
          } catch( IOException e) {
            // at least log it here ...
          }

        }
    });

因为您无法简单地将throws关键字添加到重写方法。