Bluetooth发送数据测试代码

package com.example.bt_client;

import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;


public class MainActivity extends ListActivity {
	
	private static final String TAG = MainActivity.class.getSimpleName();
	private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter();
	private List<BluetoothDevice> _devices = new ArrayList<BluetoothDevice>();
	
	private static final int MESSAGE_START_PROGRESS_DIALOG = 1;
    private static final int MESSAGE_STOP_PROGRESS_DIALOG = 2;
    private ProgressDialog _mDialog;
    private boolean _refresh = false;
    
    private TextView _refresh_but;
	
	private Handler _mHandler = new Handler() {
		@Override
        public void handleMessage(Message msg) {
			switch (msg.what) {
            case MESSAGE_START_PROGRESS_DIALOG:
            	_mDialog = ProgressDialog.show(MainActivity.this,
                        "","Refresh device.\nPlease wait...");
            	_mDialog.setCancelable(true);
            	_mDialog.setOnCancelListener(new OnCancelListener() {
            		@Override
            		public void onCancel(DialogInterface arg0) {
            			_refresh = false;
            		}
            	});
            	_refresh = true;
	            break;	
            case MESSAGE_STOP_PROGRESS_DIALOG:
            	_refresh = false;
            	_mDialog.dismiss();
	            break;	
            default:
                break;
			}
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		
		_refresh_but = (TextView) findViewById(R.id.refresh_but);
		_refresh_but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				if(_bluetooth.isEnabled()){
					_bluetooth.cancelDiscovery();
					setDiscoverableTimeout(0);
					_bluetooth.startDiscovery();
					
					_mHandler.sendEmptyMessage(MESSAGE_START_PROGRESS_DIALOG);
					_devices.clear();
					showDevices();
				}
			}
		});
		
		if(!_bluetooth.isEnabled())
			_bluetooth.enable();
		
		while(!_bluetooth.isEnabled()) {
			Log.d(TAG, "_bluetooth.isEnabled()");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
		IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
		registerReceiver(_foundReceiver, foundFilter);
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		unregisterReceiver(_foundReceiver);
	}
	
	private BroadcastReceiver _foundReceiver = new BroadcastReceiver() {
		public void onReceive(Context context, Intent intent) {
			BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
			_devices.add(device);
			showDevices();
		}
	};

	protected void showDevices(){
		List<String> list = new ArrayList<String>();
		for (int i = 0, size = _devices.size(); i < size; ++i){
			StringBuilder b = new StringBuilder();
			BluetoothDevice d = _devices.get(i);
			b.append(d.getAddress()+"\n");
			b.append(d.getName());
			String s = b.toString();
			list.add(s);
		}
		final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
		setListAdapter(adapter);
	}
	
	protected void onListItemClick(ListView l, View v, int position, long id){

		final BluetoothDevice device = _devices.get(position);
		new Thread() {
			public void run() {
				BluetoothSocket socket = null;
				try {
					socket = device.createRfcommSocketToServiceRecord(
							UUID.fromString("a60f35f0-b93a-11de-8a39-08002009c666"));
					socket.connect();
					OutputStream out = socket.getOutputStream();
					String m_str = "===Bluetooth test data===";
					out.write(m_str.getBytes());
					out.flush();
					Thread.sleep(100);
					out.close();
				}catch (IOException e) {
					e.printStackTrace();	
				} catch (InterruptedException e) {
					e.printStackTrace();
				} finally {
					if (socket != null) {
						try {
							socket.close();
						} catch (IOException e) {
							e.printStackTrace();	
						}
					}
				}
			};
		}.start();
	}
	
	public void setDiscoverableTimeout(int timeout) {
		BluetoothAdapter adapter=BluetoothAdapter.getDefaultAdapter();
		try {
			Method setDiscoverableTimeout = BluetoothAdapter.class.getMethod("setDiscoverableTimeout", int.class);
			setDiscoverableTimeout.setAccessible(true);
			Method setScanMode =BluetoothAdapter.class.getMethod("setScanMode", int.class,int.class);
			setScanMode.setAccessible(true);
			
			setDiscoverableTimeout.invoke(adapter, timeout);
			setScanMode.invoke(adapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE,timeout);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值