在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android bluetooth 搜尋距離

android bluetooth 搜尋距離

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:15.58M
  • 下载次数:12
  • 浏览次数:199
  • 发布时间:2018-04-17
  • 实例类别:Android平台开发
  • 发 布 人:wei-chen
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Android c can d t

实例介绍

【实例简介】

【实例截图】

【核心代码】

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);


        }
    };

}


标签: Android c can d t

实例下载地址

android bluetooth 搜尋距離

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警