实例介绍
【实例截图】
【核心代码】
package com.example.weichen.afinal;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private Button btn, btn2;
private TextView textView;
private ListView scanlist;
private ArrayList<String> deviceName; //用來裝搜尋到的設備名稱
private ListAdapter listAdapter; //等等用來將listView綁上Adapter
private BluetoothManager bluetoothManager;
private BluetoothAdapter mBluetoothAdapter;
private static final String TAG = "mylogggg";
private ArrayList<BluetoothDevice> mBluetoothDevices = new ArrayList<BluetoothDevice>();
ArrayAdapter<String> btArrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn_find); //按鈕打開藍芽
btn2 = (Button) findViewById(R.id.button2); //按鈕偵測
textView = (TextView) findViewById(R.id.textView);
scanlist = (ListView) findViewById(R.id.mListView);
btn.setOnClickListener(mybtn1);
btn2.setOnClickListener(mybtn2);
//ListView相關宣告
deviceName = new ArrayList<String>();
listAdapter = new ArrayAdapter<String>(getBaseContext(),
android.R.layout.simple_expandable_list_item_1, deviceName);//ListView使用的Adapter,
//listAdapter一定要先new出來,才能做setAdapter ////將listView綁上Adapter
scanlist.setAdapter(listAdapter);
System.out.println(deviceName);
}
//『是否開啟藍芽』 (沒問題)
private Button.OnClickListener mybtn1 = new Button.OnClickListener() {
@Override
public void onClick(View v) {
//得到 BluetoothAdapter對象
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
//判斷 BluetoothAdapter 對象是否為空,若空則表示本機無藍芽設備
if (adapter == null) {
Toast toast = Toast.makeText(MainActivity.this, "本機無藍芽設備", Toast.LENGTH_SHORT);
toast.show();
}
/*if (!adapter.isEnabled()) {
//用Intent提示使用者開啟藍芽 (用Intent從APP本身要求開啟)
Intent in = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(in);
Toast toast = Toast.makeText(MainActivity.this, "已經開藍芽了", Toast.LENGTH_SHORT);
toast.show();
}*/
/* 下面三行 為了讓mBluetoothAdapter.enable()不會crash ,所以需要*/
bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
mBluetoothAdapter = bluetoothManager.getAdapter();
}
if (mBluetoothAdapter.enable()) { //(從系統本身要求開啟)
Toast toast = Toast.makeText(MainActivity.this, "已經開啟藍芽了", Toast.LENGTH_SHORT);
toast.show();
}
}
};
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
runOnUiThread(new Runnable() {
//使用runOnUiThread方法,其功能等同於WorkThread透過Handler將資訊傳到MainThread(UiThread)中,
//詳細可進到runOnUiThread中觀察
@Override
public void run() {
if (!mBluetoothDevices.contains(device)) { //利用contains判斷是否有搜尋到重複的device
mBluetoothDevices.add(device); //如沒重複則添加到bluetoothdevices中
//將device的Name、rssi、address裝到此ArrayList<Strin>中
deviceName.add(device.getName() " rssi:" rssi "\r\n" device.getAddress());
//使用notifyDataSetChanger()更新listAdapter的內容
((BaseAdapter) listAdapter).notifyDataSetChanged();
}
}
});
}
};
private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE);
btArrayAdapter.add("Name: " device.getName() "\n" "Address: " device.getAddress()
"\n" "rssi: " rssi " dBm");
btArrayAdapter.notifyDataSetChanged();
}
}
};
private Button.OnClickListener mybtn2 = new Button.OnClickListener(){
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
mBluetoothAdapter.startLeScan(mLeScanCallback);//跳到mLeScanCallback開始搜尋BLE設備
}
textView.setText("Scanning");
Log.d(TAG, "Start Scan");
System.out.println(deviceName);
}
};
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论