文山湖的猫 2016-07-09 03:44 采纳率: 25%
浏览 1197
已采纳

安卓粘贴代码后运行出错

原本是一个蓝牙app,在原先的工程里运行正常,但粘贴到新工程后就出错了,app点击“打开蓝牙”按键会崩溃,其他按键倒没问题。
package com.test.blacksaber.bluetooth;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

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 android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
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.ToggleButton;

public class MainActivity extends Activity {
static final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";
Button btnSearch, btnDis, btnExit;
ToggleButton tbtnSwitch;
ListView lvBTDevices;
ArrayAdapter adtDevices;
List lstDevices = new ArrayList();
BluetoothAdapter btAdapt;
public static BluetoothSocket btSocket;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Button 设置
    btnSearch = (Button) this.findViewById(R.id.btnSearch);
    btnSearch.setOnClickListener(new ClickEvent());
    btnExit = (Button) this.findViewById(R.id.btnExit);
    btnExit.setOnClickListener(new ClickEvent());
    btnDis = (Button) this.findViewById(R.id.btnDis);
    btnDis.setOnClickListener(new ClickEvent());

    // ToogleButton设置
    tbtnSwitch = (ToggleButton) this.findViewById(R.id.tbtnSwitch);
    tbtnSwitch.setOnClickListener(new ClickEvent());

    // ListView及其数据源 适配器
    lvBTDevices = (ListView) this.findViewById(R.id.lvDevices);
    adtDevices = new ArrayAdapter<String>(MainActivity.this,
            android.R.layout.simple_list_item_1, lstDevices);
    lvBTDevices.setAdapter(adtDevices);
    lvBTDevices.setOnItemClickListener(new ItemClickEvent());

    btAdapt = BluetoothAdapter.getDefaultAdapter();// 初始化本机蓝牙功能

    if (btAdapt.getState() == BluetoothAdapter.STATE_OFF)// 读取蓝牙状态并显示
        tbtnSwitch.setChecked(false);
    else if (btAdapt.getState() == BluetoothAdapter.STATE_ON)
        tbtnSwitch.setChecked(true);

    // 注册Receiver来获取蓝牙设备相关的结果
    IntentFilter intent = new IntentFilter();
    intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver来取得搜索结果
    intent.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
    intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
    intent.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(searchDevices, intent);
}


private BroadcastReceiver searchDevices = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Bundle b = intent.getExtras();
        Object[] lstName = b.keySet().toArray();

        // 显示所有收到的消息及其细节
        for (int i = 0; i < lstName.length; i++) {
            String keyName = lstName[i].toString();
            Log.e(keyName, String.valueOf(b.get(keyName)));
        }
        //搜索设备时,取得设备的MAC地址
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent
                    .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            String str= device.getName() + "|" + device.getAddress();
            if (lstDevices.indexOf(str) == -1)// 防止重复添加
                lstDevices.add(str); // 获取设备名称和mac地址
            adtDevices.notifyDataSetChanged();
        }
    }
};

@Override
protected void onDestroy() {
    this.unregisterReceiver(searchDevices);
    super.onDestroy();
    android.os.Process.killProcess(android.os.Process.myPid());
}

class ItemClickEvent implements AdapterView.OnItemClickListener {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                            long arg3) {
        btAdapt.cancelDiscovery();
        String str = lstDevices.get(arg2);
        String[] values = str.split("\\|");
        String address=values[1];
        Log.e("address",values[1]);
        UUID uuid = UUID.fromString(SPP_UUID);
        BluetoothDevice btDev = btAdapt.getRemoteDevice(address);
        try {
            btSocket = btDev
                    .createRfcommSocketToServiceRecord(uuid);
            btSocket.connect();
            //打开波形图实例
            Intent intent = new Intent();
            intent.setClass(MainActivity.this, WaveDiagram.class);
            startActivity(intent);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}


class ClickEvent implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        if (v == btnSearch)// 搜索蓝牙设备,在BroadcastReceiver显示结果
        {
            if (btAdapt.getState() == BluetoothAdapter.STATE_OFF) {// 如果蓝牙还没开启
                Toast.makeText(MainActivity.this, "请先打开蓝牙", 1000).show();
                return;
            }
            setTitle("本机蓝牙地址:" + btAdapt.getAddress());
            lstDevices.clear();
            btAdapt.startDiscovery();
        } else if (v == tbtnSwitch) {// 本机蓝牙启动/关闭
            if (tbtnSwitch.isChecked() == false)
                btAdapt.enable();
            else if (tbtnSwitch.isChecked() == true)
                btAdapt.disable();
        } else if (v == btnDis)// 本机可以被搜索
        {
            Intent discoverableIntent = new Intent(
                    BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            discoverableIntent.putExtra(
                    BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
            startActivity(discoverableIntent);
        } else if (v == btnExit) {
            try {
                if (btSocket != null)
                    btSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            MainActivity.this.finish();
        }
    }

}

}

下面是日志:
图片说明
如何解决,谢谢

  • 写回答

2条回答 默认 最新

  • yhyan7 2016-07-09 07:14
    关注

    我记得打开蓝牙是需要权限的,你加了没有

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘