zoukankan      html  css  js  c++  java
  • Android 蓝牙搜索

         最近学习了蓝牙的搜索,不过在调试的时候发现模拟器上要报错,后来想了一下,模拟器上没有蓝牙的模块,根本不能运行啊。所以像蓝牙这种需要硬件支持的项目,还是需要真机调试的。

        其他的不多说了吧,下面就直接上代码吧:

      下面呢就是蓝牙搜索的全部代码,里面包含的有蓝牙的打开,关闭以及搜索附近的蓝牙:

    package cn.chenwei.android.app;
    
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.bluetooth.BluetoothAdapter;
    import android.bluetooth.BluetoothDevice;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Adapter;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    public class SearchBluetoothActivity extends Activity {
    	/** Called when the activity is first created. */
    
    	BluetoothAdapter bluetoothAdapter = null;
    	private ListView listview;
    	ArrayAdapter<String> adapter = null;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    		// 得到listview
    		listview = (ListView) findViewById(R.id.list);
    
    		bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// 获取蓝牙适配器
    
    		boolean flag = bluetoothAdapter.isEnabled();
    		if (flag) {
    			Toast.makeText(this, "蓝牙已经打开", Toast.LENGTH_SHORT).show();
    		} else {
    			bluetoothAdapter.enable();// 打开蓝牙设备
    			Toast.makeText(this, "正在打开蓝牙", Toast.LENGTH_SHORT).show();
    		}
    
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// TODO Auto-generated method stub
    
    		menu.add("搜索附近蓝牙设备");
    
    		return super.onCreateOptionsMenu(menu);
    	}
    
    	boolean flag = true;// 线程停止的状态
    
    	String[] strs = null;
    
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		// TODO Auto-generated method stub
    		Toast.makeText(this, "正在搜索蓝牙", Toast.LENGTH_SHORT).show();
    
    		// 动态注册
    		IntentFilter filter = new IntentFilter();
    		filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    		filter.addAction(BluetoothDevice.ACTION_FOUND);
    		filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    
    		registerReceiver(new MyBroadcastReceiver(), filter);
    
    		new Thread(new Runnable() {
    
    			public void run() {
    				// TODO Auto-generated method stub
    
    				while (true) {
    					bluetoothAdapter.startDiscovery();// 开始搜索
    					if (!flag) {
    						for (BluetoothDevice bd : list) {
    							System.out.println("搜索蓝牙" + bd.getName());
     
    						}
     
    					}
    
    					break;
    				}
    
    			}
    		}).start();
    
    		return super.onOptionsItemSelected(item);
    	}
    
    	// 创建数组用于储存 搜索到的蓝牙
    	ArrayList<BluetoothDevice> list = null;
    
    	// 蓝牙的三个状态,打开,发现,结束
    	class MyBroadcastReceiver extends BroadcastReceiver {
    
    		@Override
    		public void onReceive(Context context, Intent intent) {
    			// TODO Auto-generated method stub
    
    			System.out.println("kaishile ");
    			String action = intent.getAction();
    			if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {// 开始
    				Toast.makeText(SearchBluetoothActivity.this, "开始状态",
    						Toast.LENGTH_LONG).show();
    				list = new ArrayList<BluetoothDevice>();
    			} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {// 搜索
    
    				Toast.makeText(SearchBluetoothActivity.this, "发现状态",
    						Toast.LENGTH_LONG).show();
    				BluetoothDevice bluetoothDevice = (BluetoothDevice) intent
    						.getExtras().get(BluetoothDevice.EXTRA_DEVICE);
    
    				list.add(bluetoothDevice);
    
    			} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
    					.equals(action)) {//结束
    				Toast.makeText(SearchBluetoothActivity.this, "结束状态",
    						Toast.LENGTH_LONG).show();
    
    				flag = false;// 修改状态
    				unregisterReceiver(this);// 注销广播
    			}
    		}
    
    	}
    
    }
    

          不过到这个地方,搜索蓝牙的功能还不能实现,因为缺少了调用蓝牙的权限:

        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    

       以上就是蓝牙搜索的全部代码,希望对朋友们有所帮助,各位朋友有什么问题请多多指教啊

        

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/boyuanmeng/p/3555015.html
Copyright © 2011-2022 走看看