1. 程式人生 > >android 藍芽通訊實現手機藍芽的開啟,並掃描附近可見的藍芽裝置

android 藍芽通訊實現手機藍芽的開啟,並掃描附近可見的藍芽裝置

藍芽是一種重要的短距離無線通訊協議,廣泛應用於各種裝置(手機,醫療,汽車等)。藍芽是比較常用的無線通訊裝置,早研究成為手機的標配。現在的安卓手機基本上都有藍芽,所有通過藍芽對資料有很好的硬體基礎

在Android中,與藍芽有關的類和介面在android.bluetooth包中。其中BluetoothAdapter是藍芽中的核心類,代表本地的藍芽介面卡裝置。BluetoothAdapter類讓使用者能執行基本的藍芽任務。例如: 初始化裝置的搜尋,查詢可匹配的裝置集,使用一個已知的MAC地址來初始化一個BluetoothDevice類,建立一個 BluetoothServerSocket類以監聽其它裝置

對本機的連線請求等。

開啟和掃描藍芽,並將掃面到的藍芽裝置顯示在listview上

BluetoothActivity

package cn.edu.cqu.bluetooth;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
import com.example.project.R;

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.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class BluetoothActivity extends Activity{
	
	private Button button2;
	private ListView list;
	private ArrayAdapter mArrayAdapter;  
	private BluetoothReceiver bluetoothReceiver;
	private BluetoothAdapter bluetoothAdapter;
	private BluetoothDevice device;
	private ArrayList<String> PairedMaclist;
	private TextView textView1;
	int flag;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.bluetooth);
		
		 	
	        list = (ListView)findViewById(R.id.listView);
	        textView1 = (TextView)findViewById(R.id.textView);
	        
	        //建立一個IntentFilter物件,將其action指定為BluetoothDevice.ACTION_FOUND,查詢藍芽
	        IntentFilter intentFileter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
	        bluetoothReceiver = new BluetoothReceiver();
	        //註冊廣播接收器
	        registerReceiver(bluetoothReceiver, intentFileter);
	        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
	        button2 = (Button)findViewById(R.id.scanButton);
	        button2.setOnClickListener(new ScanButtonListener());
	        list.setOnItemClickListener(new ListViewListener());
	        
	        openBluetooth();
	        
	        mArrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1);
	        PairedMaclist=new ArrayList<String>();
	       
	}
	
		@Override
	protected void onDestroy() {
		unregisterReceiver(bluetoothReceiver);
		super.onDestroy();
	}

		private void openBluetooth() {
			//bluetoothAdapter.enable();
			if(bluetoothAdapter != null){
				if(!bluetoothAdapter.isEnabled()){
					Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
					startActivity(intent);
				}
				//得到所有已經被對的藍芽介面卡物件
				Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();
				if(devices.size() > 0){
					for(Iterator<BluetoothDevice> iterator = devices.iterator();iterator.hasNext();){
						BluetoothDevice bluetoothDevice = (BluetoothDevice) iterator.next();
						//得到遠端藍芽裝置的地址
						System.out.println(bluetoothDevice.getAddress());
					}
				}
			}
			else {
				//System.out.println("沒有藍芽裝置");
				Toast.makeText(BluetoothActivity.this, "沒有藍芽裝置",0).show();
			}
		}
		
    class BluetoothReceiver extends BroadcastReceiver{

		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			if(BluetoothDevice.ACTION_FOUND.equals(action)){
				//得到intent裡面的資訊
				device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
				Toast.makeText(BluetoothActivity.this, "發現藍芽裝置",0).show();
				//System.out.println(device.getAddress());
				mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
				PairedMaclist.add(device.getAddress());
				list.setAdapter(mArrayAdapter);
			}
		}
    	
    }
    
    class ScanButtonListener implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			mArrayAdapter.clear();
			
			bluetoothAdapter.startDiscovery();
			Toast.makeText(BluetoothActivity.this, "開始掃描",0).show();
		}
    	
    }
    
    class ListViewListener implements OnItemClickListener{

		@Override
		public void onItemClick(AdapterView<?> arg0, View view, int position,
				long id) {
			 String str = PairedMaclist.get(position);
			 //System.out.println("Str-------------" + str);
			 Intent intent = new Intent(BluetoothActivity.this,BluetoothWaveform.class);
			 intent.putExtra("BluetoothMAC",str);
			 startActivity(intent);
		}
    	
    }
}
顯示和掃描藍芽佈局檔案
<pre name="code" class="html"><LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="20dp"
    android:orientation="vertical" >
        
    
    <Button 
        android:id="@+id/scanButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:text="掃描藍芽裝置"/>
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:textSize="20sp"
        android:text="搜尋到以下裝置:"/>
    <ListView 
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ></ListView>
     
</LinearLayout><img src="https://img-blog.csdn.net/20150409144408261?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmZlbmdkZWp1YW5saWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

相關推薦

android 通訊實現手機開啟掃描附近可見裝置

藍芽是一種重要的短距離無線通訊協議,廣泛應用於各種裝置(手機,醫療,汽車等)。藍芽是比較常用的無線通訊裝置,早研究成為手機的標配。現在的安卓手機基本上都有藍芽,所有通過藍芽對資料有很好的硬體基礎 在Android中,與藍芽有關的類和介面在android.bluetooth包

Android適配安卓6.0通訊實現過程

實現需要的許可權:由於安卓4.x版以上的版本使用藍芽,需要開啟定位許可權才能搜尋到附近的藍芽裝置 1 2 3 4 五 <uses-permission android:name="android.permission.BLUETOOTH"/>

手機暗屏下後臺不能使用後臺gps不能定位

一般情況下手機鎖屏後,部分手機,Android系統為了省電以及減少CPU消耗,在一段時間手機將會進入休眠狀態。 解決方案: 首先在AndroidManifest.xml中申請WakeLock許可權。 <uses-permission andr

android中利用Socket實現手機客戶端與PC端進行通訊

伺服器端: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; impor

Android中Https通訊實現_ 單向認證

客戶端與服務端單向認證即是在客戶端的網路請求和webview中設定信任所有證書,然後在與服務端進行Https網路通訊的時候,客戶端不必進行證書校驗也能進行網路通訊,否則就會報證書不受信異常。 缺陷:容易受到中間人攻擊。 概覽 TrustManager和Hos

Android中Https通訊實現_瞭解Https

概覽 什麼是Https Https和Http的區別 Https證書 什麼是Https HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是

Android中Https通訊實現_中間人攻擊、DNS欺騙和會話劫持

上一篇文章記述了在Android中使用Https進行單向認證的配置,但單向認證存在中嚴重的安全漏洞,其中最容易受到中間人攻擊和DNS欺騙以及會話劫持,本文主要講述進行中間人攻擊、DNS欺騙和會話劫持的方式。 概覽 什麼是中間人攻擊 模擬中間人攻擊

Android 程序間通訊實現原理分析

/**  * 客戶端控制介面  */ public class MainActivity extends Activity {  public static final String TAG = "MainActivity";  // 服務端 AndroidManifest.xml中的intent-fil

Android TabLayout+ViewPager+Fragment實現tab欄的時候無法實時更新ViewPager內的Fragment問題終極解決方法

TabLayout+ViewPager+Fragment模式在應用中必不可少,有時候我們可能會遇到tab欄會動態改變的問題,如新增,或刪減,這時候就需要把viewpager內相應的fragment新增或刪減; 如想做以下等操作? 1、更新單個item mDataList.remove(0

android開發 19 呼叫手機的攝像頭錄影播放

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android RecyclerView 實現瀑布流交錯效果使最後一行子View高度佔滿RecyclerView

而在實現完瀑布流後,覺得滑動到底部時,最後一行的高度,沒有佔滿外部View,感覺不太好。(真正的瀑布流應該是條目數近乎無窮,可以一直載入更多) 既然是瀑布流,那麼就選用StaggeredGridLayoutManager。 mRecyclerView.s

h5+實現手機端的錄音拍照錄影

            使用h5+即h5plus可以實現呼叫手機的功能實現語音的錄製播放,圖片上傳下載,拍照,錄影的功能,並提供上傳下載的功能。開發工具使用hbuilder,該開發工具有模板和demo可以參考實現快速的開發app功能。使用h5呼叫硬體的功能,實現原生的效果,前

Android 跑馬燈效果實現的兩種方式解決和viewpager的衝突問題

第一篇部落格寫一點簡單的東西,多麼的簡單,就是一個跑馬燈,簡單的要死。所以話不多,寫起來。首先我們來講一個段子先緩和一下氣氛。大學的時候,隔壁宿舍老喜歡蹭我的wifi,煩死了,然後我把wifi名改成了:206有個帥哥是誰。密碼是我的名字,媽的看誰還蹭,結果。除了

Android 實現Json數據解析進行應用

二維 message contex title 開發 blog asmx ear 身份證 從網站上獲取數據然後再客戶端進行解析是常見的數據交互。下面是常用的一些接口網址: webservice工廠接口 http://www.36wu.com 快遞查詢接口http://

微信公眾號開發《四》使用微信JS-SDK實現手機圖片上傳支援壓縮、預覽。下載圖片到自身伺服器

在這貼上上三篇博文連結,方便大家查閱互相學習: 本次講解微信開發第四篇:呼叫微信JS-SDK實現上傳手機圖片到伺服器,是非常常見的功能。如我們看到的使用者上傳頭像 下面是本次要實現的效果圖,支援預覽,壓縮上傳(自帶,可引數控制) 1.準備工作:工欲善其事,必先利其

Android 實現省份城市的選擇獲取城市編號

該程式主要使用 中央氣象局 省份 城市資料庫為基礎 進行讀取 下載的資料庫 db_weather.db 放到sdcard/weather 目錄下面 方便後續操作 為了更好的瞭解資料庫,使用 SQLite Database Browser 可以開啟資

Android Handler和ProgressBar實現進度條的開始暫停停止後退和迴圈

import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListen

WebForm實現文件上傳預覽

image form ict itl lec nbsp style object 是否 實現效果: 頁面代碼: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inh

作業1#python用列表實現多用戶登錄有三次機會

循環 HA 成功 NPU name 單用戶 登錄 [1] and 1 username = ["juebai","haha"] 2 password = [123,456] 3 count = 0 4 while count < 3: 5 _use

lua 4 使用table實現其他數據結構介紹遍歷方法

ger true key 51cto 先進先出 https ash 開發者 默認 本文會以vector / map / set 這三種數據類型的角度來梳理 table 支持的不同遍歷方式。 table as array / vector 一般,C/C++中的 array