我正在尝试使用 Kotlin(Java 版本也不起作用)列出 Android 设备上的所有 BLE 设备,但我没有收到任何设备或任何回电,除了“扫描”已经开始了” 我在 list 中拥有正确的使用权限。
这是我正在尝试的当前最少代码。 但即使是来自 Google 的示例代码也列出了所有设备。 我在运行 Android 版本 8.1.0 的 Pixel 上运行。 我让它在 iOS 上运行,带有基本的 BLE 设备列表 (Swift)!
private val bleScanner = object :ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult?) {
super.onScanResult(callbackType, result)
Log.d("DeviceListActivity","onScanResult: ${result?.device?.address} - ${result?.device?.name}")
}
override fun onBatchScanResults(results: MutableList<ScanResult>?) {
super.onBatchScanResults(results)
Log.d("DeviceListActivity","onBatchScanResults:${results.toString()}")
}
override fun onScanFailed(errorCode: Int) {
super.onScanFailed(errorCode)
Log.d("DeviceListActivity", "onScanFailed: $errorCode")
}
}
private val bluetoothLeScanner: BluetoothLeScanner
get() {
val bluetoothManager = applicationContext.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val bluetoothAdapter = bluetoothManager.adapter
return bluetoothAdapter.bluetoothLeScanner
}
class ListDevicesAdapter(context: Context?, resource: Int) : ArrayAdapter<String>(context, resource)
override fun onCreate(savedInstanceState: Bundle?) {
Log.d("DeviceListActivity", "onCreate()")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_device_list)
}
override fun onStart() {
Log.d("DeviceListActivity","onStart()")
super.onStart()
bluetoothLeScanner.startScan(bleScanner)
}
override fun onStop() {
bluetoothLeScanner.stopScan(bleScanner)
super.onStop()
}
最佳答案
您需要声明权限:
uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
对于 Android 6.0 以上的设备,您手动请求此权限:
override fun onStart() {
Log.d("ScanDeviceActivity", "onStart()")
super.onStart()
when (PermissionChecker.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
PackageManager.PERMISSION_GRANTED -> bluetoothLeScanner.startScan(bleScanner)
else -> requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), 1)
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when (requestCode) {
1 -> when (grantResults) {
intArrayOf(PackageManager.PERMISSION_GRANTED) -> {
Log.d("ScanDevices", "onRequestPermissionsResult(PERMISSION_GRANTED)")
bluetoothLeScanner.startScan(bleScanner)
}
else -> {
Log.d("ScanDevices", "onRequestPermissionsResult(not PERMISSION_GRANTED)")
}
}
else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
关于android - 列出 BLE 设备 Android - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50910302/
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation
当我对内置类进行子类化时,为什么inspect中的行为会发生变化。但是当我子类化一个自定义的时没有看到。classMainErrorendclassAnotherTestErrort=TestError.newputst.inspect#output:# 最佳答案 因为很多(大多数?全部?)内置类是用C语言编写的,并且覆盖#inspect。例如,Exception(StandardError的父类(superclass))定义#inspect如下:exc_inspect(VALUEexc){VALUEstr,klass;klass=
如何在windows7下获取Ruby1.9.1中的有效Iconv编码列表? 最佳答案 也许这会有所帮助:putsEncoding.listputsEncoding.aliases它返回一个加载的编码列表,以及一个编码别名的散列:ASCII-8BITUTF-8US-ASCIIBig5CP949Emacs-MuleEUC-JPEUC-KREUC-TW...{"BINARY"=>"ASCII-8BIT","CP437"=>"IBM437","CP737"=>"IBM737","CP775"=>"IBM775","IBM850"=>"CP8
我在一个独立于Rails应用程序运行的守护进程中得到ActiveRecord::ConnectionTimeoutError。我将Passenger与Apache和MySQL一起用作数据库。Passenger的默认池大小为6(至少文档是这么告诉我的),因此它不应使用超过6个连接。我已将ActiveRecord的池大小设置为10,尽管我认为我的守护进程应该只需要一个连接。我的守护进程是一个具有多个线程的进程,它在这里和那里调用ActiveRecord以将内容保存到它与Rails应用程序共享的数据库中。我需要弄清楚的是线程是否根本无法共享一个连接,或者它们是否只是不断请求新连接而不释放它们
假设我有一个名为my_template.html.erb的RubyERB模板,它包含以下内容:有没有办法以编程方式列出模板中的所有可用变量?例如下面的方法:deflist_out_variablestemplate=File.open("path_to/my_template.html.erb","rb").readerb=ERB.new(template)erb.this_method_would_list_out_variablesend会返回类似的东西:['div1','div2','div3']如有任何帮助,我们将不胜感激。谢谢,迈克 最佳答案
运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid
1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La
我正在使用适用于AmazonSNS的AmazonAWSRubySDK,但我在使用已注册的设备时遇到了一些问题。有时,当设备再次注册时,我会收到类似AWS::SNS::Errors::InvalidParameterInvalidparameter:TokenReason:Endpointarn:aws:sns:us-east-1:****alreadyexists这样的错误具有相同的Token,但具有不同的属性。。如何检查端点是否已存在,更重要的是,如何获取给定token的端点? 最佳答案 感谢BvdBijl的想法,我做了一个扩展方