1. package com.arci.myapplication
  2.  
  3. import android.app.Activity
    import android.os.Bundle
    import android.support.design.widget.Snackbar
    import android.support.v7.app.AppCompatActivity
    import android.view.Menu
    import android.view.MenuItem
    import android.view.View
  4.  
  5. import kotlinx.android.synthetic.main.activity_main.*
    import android.widget.TextView
    import kotlinx.android.synthetic.main.content_main.*
    import android.bluetooth.BluetoothManager
    import android.content.Context
    import android.bluetooth.BluetoothAdapter
    import android.widget.Toast
    import android.content.Intent
    import android.text.method.TextKeyListener.clear
    import android.bluetooth.BluetoothDevice
    import android.bluetooth.le.BluetoothLeScanner
    import android.content.BroadcastReceiver
    import android.content.IntentFilter
  6.  
  7. class MainActivity : AppCompatActivity() {
    val REQUEST_BLUETOOTH_TURN_ON = 1
    lateinit var bluetoothAdapter: BluetoothAdapter
    lateinit var bluetoothManager: BluetoothManager
  8.  
  9. var bluetoothDeviceList = ArrayList<BluetoothDevice>()
  10.  
  11. // 广播接收发现蓝牙设备
    private val mReceiver = object : BroadcastReceiver() {
  12.  
  13. override fun onReceive(context: Context, intent: Intent) {
    val action = intent.action
  14.  
  15. if (BluetoothAdapter.ACTION_DISCOVERY_STARTED == action) {
    //Log.d(FragmentActivity.TAG, "开始扫描...")
    Toast.makeText(context.applicationContext, "蓝牙扫描开始", Toast.LENGTH_SHORT).show()
    }
  16.  
  17. if (BluetoothDevice.ACTION_FOUND == action) {
    val device = intent.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)
    if (device != null) {
    // 添加到ListView的Adapter。
    //mAdapter.add("设备名:" + device.name + "\n设备地址:" + device.address)
    //mAdapter.notifyDataSetChanged()
    Toast.makeText(context.applicationContext, device.name + ": " + device.address, Toast.LENGTH_SHORT).show()
    }
    }
  18.  
  19. if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED == action) {
    //Log.d(FragmentActivity.TAG, "扫描结束.")
    Toast.makeText(context.applicationContext, "蓝牙扫描结束", Toast.LENGTH_SHORT).show()
    }
    }
    }
  20.  
  21. override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)
  22.  
  23. fab.setOnClickListener { view ->
    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
    .setAction("Action", null).show()
    }
    // 注册广播接收器。
    // 接收蓝牙发现
    val filterFound = IntentFilter(BluetoothDevice.ACTION_FOUND)
    registerReceiver(mReceiver, filterFound)
  24.  
  25. val filterStart = IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED)
    registerReceiver(mReceiver, filterStart)
  26.  
  27. val filterFinish = IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)
    registerReceiver(mReceiver, filterFinish)
  28.  
  29. //蓝牙管理,这是系统服务可以通过getSystemService(BLUETOOTH_SERVICE)的方法获取实例
    bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
    //通过蓝牙管理实例获取适配器,然后通过扫描方法(scan)获取设备(device)
    bluetoothAdapter = bluetoothManager.adapter
    if (!bluetoothAdapter.isEnabled) {
    val bluetoothTurnOn = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
    startActivityForResult(bluetoothTurnOn, REQUEST_BLUETOOTH_TURN_ON)
    } else {
    bluetoothAdapter.startDiscovery();
    }
    }
  30.  
  31. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
    REQUEST_BLUETOOTH_TURN_ON->{
    when (resultCode) {
    RESULT_OK->{
    //TextView1.text = "蓝牙开启成功"
    Toast.makeText(this.applicationContext, "蓝牙开启成功", Toast.LENGTH_SHORT).show()
    bluetoothAdapter.startDiscovery()
    }
    RESULT_CANCELED->{
    //TextView1.text = "蓝牙开启失败"
    Toast.makeText(this.applicationContext, "蓝牙开启失败", Toast.LENGTH_SHORT).show()
    }
    }
    }
    }
    }
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // Inflate the menu; this adds items to the action bar if it is present.
    menuInflater.inflate(R.menu.menu_main, menu)
    return true
    }
  32.  
  33. override fun onOptionsItemSelected(item: MenuItem): Boolean {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    return when (item.itemId) {
    R.id.action_settings -> true
    else -> super.onOptionsItemSelected(item)
    }
    }
    }

Android 6.0 Kotlin 蓝牙扫描的更多相关文章

  1. Android 6.0 Kotlin 蓝牙BLE扫描(改为指定时间没有发现新设备后停止扫描使用interface)

    package com.arci.myapplication import android.os.Bundleimport android.support.design.widget.Snackbar ...

  2. Android 6.0 Kotlin 蓝牙BLE扫描

    package com.arci.myapplication import android.os.Bundleimport android.support.design.widget.Snackbar ...

  3. Android Studio3.0 Kotlin工程问题集

    问题1: 新建支持Kotlin的Android项目,卡在"Resolve dependency :classpath" 解决分析: 一般碰到"Resolve depend ...

  4. Android网络开发之蓝牙

    蓝牙采用分散式网络结构以及快调频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(I-工业.S-科学.M-医学)频段,其数据速率为1Mbps,采用时分双工传输方案.   蓝牙 ...

  5. Android开发之蓝牙--扫描已经配对的蓝牙设备

    一. 什么是蓝牙(Bluetooth)? 1.1  BuleTooth是目前使用最广泛的无线通信协议 1.2  主要针对短距离设备通讯(10m) 1.3  常用于连接耳机,鼠标和移动通讯设备等. 二. ...

  6. 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.s ...

  7. Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探

    Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便 ...

  8. Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_ ...

  9. Android Studio 蓝牙开发实例——基于Android 6.0

    因项目需要做一个Android 的蓝牙app来通过手机蓝牙传输数据以及控制飞行器,在此,我对这段时间里写的蓝牙app的代码进行知识梳理和出现错误的总结. 该应用的Compile Sdk Version ...

随机推荐

  1. 临界区(Critical Section)的封装和使用示例

    向我老大致敬! 这个做法其实是抄我老大的.服务器中,多线程经常需要使用临界区,为了简化代码的使用,把临界区封装为 CThreadLockHandle  类,通过封装,使用临界区资源每次只需要一行代码, ...

  2. MPAndroidChart -- LimitLine的坑

    好久没有写博客了,最近比较忙,项目中使用了MPAndroidChart,初次使用也比较蠢,很多API都得一个一个查,但有些时候当你想应该有这个API的时候他却没有,就比如今天的主角LimitLine ...

  3. 安装Node.js以及Hexo

    安装前提 安装 Hexo 相当简单.然而在安装前,您必须检查电脑中是否已安装下列应用程序: Node.js 如何在Ubuntu上安装最新版本的Node.js https://hexo.io/zh-cn ...

  4. String类和StringBuffer类

    位于java.lang包中,这个包中的类使用时不用导入 String类一旦初始化就不可以改变,而stringbuffer则可以.它用于封装内容可变的字符串.它可以使用tostring()转换成stri ...

  5. js 自定义类

    将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...

  6. js压缩 uglify

    grunt-contrib-uglify uglify是一个文件压缩插件,项目地址:https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO ...

  7. Hadoop2的FN安装(federated namespace)

    尝试了简单的安装hadoop2后,我们再来尝试一下hdfs的一项新功能:FN.这项技术可以解决namenode容量不足的问题.它采用多个namenode来共享datanode的方式,每个namenod ...

  8. JVM内存计算问题

    -Xmx10240m:代表最大堆  -Xms10240m:代表最小堆  -Xmn5120m:代表新生代  -XXSurvivorRatio=3:代表Eden:Survivor = 3    根据Gen ...

  9. apktool 工具

      下载 https://code.google.com/p/android-apktool/ apktool_2.0.0rc2.jar 和apktool linux脚本 ln –s apktool_ ...

  10. 客户也可以申请它使用的最后一个IP地址。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。

    http://baike.baidu.com/item/IP地址 公有地址 公有地址(Public address)由Inter NIC(Internet Network Information Ce ...