마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 블루투스 구현중에 문제에 대해서 도와주세요 ㅠㅠ

0 추천
현재 구현중인 어플에 블루투스 기능이 필요한데

블루투스 디바이스 검색중에 뒤로가기를 누르면

어플이 죽어버리는 현상이 발생하네요

무슨 이유때문에 죽어버리는걸까요?ㅜㅜ
익명사용자 님이 2014년 4월 17일 질문
어플이 죽어버리는 이유는 매우 많습니다..

따라서 해당 부분의 코드나 오류 메세지를 올려주시면 해결하는데 많은 도움이 됩니다.
package com.example.s20140403z;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class ClientSocketActivity  extends Activity
{
    private static final int REQUEST_CONNECT_DEVICE = 1;
   
    private static final String TAG = ClientSocketActivity.class.getSimpleName();
    private static final int REQUEST_DISCOVERY = 0x1;;
    private Handler _handler = new Handler();
    private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter();
   
    private BluetoothSocket socket = null;
    private TextView sTextView;
    private EditText sEditText;
    private String str;
    private OutputStream outputStream;
    private InputStream inputStream;
    private StringBuffer sbu;
   
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
        WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
        setContentView(R.layout.client_socket);
        if (!_bluetooth.isEnabled()) {
            finish();
            return;
        }
        //Intent intent = new Intent(this, DiscoveryActivity.class);
       
        /* Prompted to select a server to connect */
        //Toast.makeText(this, "select device to connect", Toast.LENGTH_SHORT).show();
       
        /* Select device for list */
    //    startActivityForResult(intent, REQUEST_DISCOVERY);
       
        sTextView = (TextView)findViewById(R.id.sTextView);
        sEditText = (EditText)findViewById(R.id.sEditText);
       
        Log.d("EF-BTBee", ">>setOnKeyListener");
    }
   
   
    public void onButtonClicksend(View view) throws IOException {
       
        if(str != null)
        {
            Log.d("EF-BTBee", ">>second");
            sTextView.setText(str + "--> " + sEditText.getText());
            str += ("--> " + sEditText.getText().toString());
        }
        else
        {
            Log.d("EF-BTBee", ">>frist");
            sTextView.setText("--> " + sEditText.getText());
            str = "--> " + sEditText.getText().toString();
        }
        str += '\n';
       
        String tmpStr=sEditText.getText().toString();
        byte bytes[] = tmpStr.getBytes();
        outputStream.write(bytes);
    }
   
    /* after select, connect to device */
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode != REQUEST_DISCOVERY) {
            finish();
            return;
        }
        if (resultCode != RESULT_OK) {
            finish();
            return;
        }
        final BluetoothDevice device = data.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        new Thread() {
            public void run() {
                connect(device);
            };
        }.start();
    }
   
    protected void onDestroy() {
        super.onDestroy();
        try {
            socket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.e("EF-BTBee", ">>", e);
        }
    }
   
    protected void connect(BluetoothDevice device) {
        //BluetoothSocket socket = null;
        try {
            //Create a Socket connection: need the server's UUID number of registered
            socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
           
            socket.connect();
            Log.d("EF-BTBee", ">>Client connectted");
       
            inputStream = socket.getInputStream();                                                       
            outputStream = socket.getOutputStream();
            int read = -1;
            final byte[] bytes = new byte[2048];
            for (; (read = inputStream.read(bytes)) > -1;) {
                final int count = read;
                _handler.post(new Runnable() {
                    public void run() {
                        StringBuilder b = new StringBuilder();
                        for (int i = 0; i < count; ++i) {
                            String s = Integer.toString(bytes[i]);
                            b.append(s);
                            b.append(",");
                        }
                        String s = b.toString();
                        String[] chars = s.split(",");
                        sbu = new StringBuffer();  
                        int sum=0;
                         for (int i = 0; i < chars.length; i++) {  
                                sbu.append((char) Integer.parseInt(chars[i]));  
                            }
                        Log.d("EF-BTBee", ">>inputStream");
// 버퍼의 개수 를 sum에 집어 놓는다 sum =sbu.length();
                        if(str != null){
                            ///줄바꿈을 해줌
                            sTextView.setText(str + "<-- " + sbu);
                            str += ("<-- " + sbu.toString());
                        }
                        else
                        {
                            sTextView.setText("<-- " + sbu);
                //            sTextView.setText("sum " + sum);
                            str = "<-- " + sbu.toString();
                        }
                        str += '\n';
                    }
                });
            }
           
        } catch (IOException e) {
            Log.e("EF-BTBee", ">>", e);
            finish();
            return ;
        } finally {
            if (socket != null) {
                try {
                    Log.d("EF-BTBee", ">>Client Socket Close");
                    socket.close();   
                    finish();
                    return ;
                } catch (IOException     e) {
                    Log.e("EF-BTBee", ">>", e);
                }
            }
        }
    }
}

코드는 이렇습니다 이부분에서 뒤로가기를 하면 죽어버리는데 이유가 있을까요?ㅠㅠ
보아하니 연결할 기기를 검색하는 클래스는 따로 있는것 같은데요;
전체 소스를 올리는 것 보다는 의심가는 부분의 소스를 올려주세요..
현재 질문에서는 검색하는 과정과 관계있는 소스코드가 되겠네요..

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...