android中通过代码来设置蓝牙永久可见性
废话不多说,直接阐述:
前段时间在搞一个android项目,其中有一个功能要求需要蓝牙可见性永久打开,但是开发过android蓝牙的程序员应该都知道,goole提供的api中没有设置蓝牙永久可见性的接口,但是在实际的项目中的确需要用到这个功能,所以这就难为到楼主了,楼主开始百度各种资料,查阅api,然后找到下边一种可以设置蓝牙可见性时间的函数:
Intent discoveryIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoveryIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);
startActivity(discoveryIntent);
这个可以在android api中查询到,里边是这样描述这个接口的:

意思大约则是这个常量作用是可以打开蓝牙,并且设置可见模式,默认的为了保护隐私,设置为不可见的,但是可以在intent中传入字段EXTRA_DISCOVERABLE_DURATION来请求可发现的持续时间。目前,默认持续时间为120秒,每个请求的最长持续时间为300秒。因此,这个方法最多一次只能显示300秒,如果想要永久打开可见性,可以开一个线程,然后每300秒后执行下上述的代码,但是执行这块代码的同时,会在app中向用户显示打开蓝牙可见性,这样的话用户体验则较差,那有没有其他的办法呢?在后台默默的打开,然后永久可见。答案当然是有的,这时候我们就要去看下BluetoothAdapter的源代码了。
在源代码中,我们可以看到有这样一个函数:

这个函数的功能就是设置蓝牙可见性持续的时间。
但是这个函数会发现在api文档中找不到,原因是goole将其隐藏掉了,但是这个函数仍然是可以调用的,调用的方式可能和普通的不一样,不能够直接调用,需要使用java的反射机制,二话不说上代码:
//声明一个class类
Class serviceManager = null;
try {
//得到这个class的类
serviceManager = Class.forName("android.bluetooth.BluetoothAdapter");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//声明一个方法
Method method = null;
try {
//得到指定的类中的方法
method = serviceManager.getMethod("setDiscoverableTimeout", String.class);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
try {
//调用这个方法
method.invoke(serviceManager.newInstance(), 30);//根据测试,发现这一函数的参数无论传递什么值,都是永久可见的
} catch (Exception e) {
e.printStackTrace();
}
android中通过代码来设置蓝牙永久可见性的更多相关文章
- 【原创】如何在Android中为TextView动态设置drawableLeft等
如何在Android中为TextView动态设置drawableLeft等 两种方式: 方式1:手动设置固有边界 Drawable drawable = getResources().getD ...
- android中ColorStateList及StateListDrawable设置Selector
写过android的代码相信大家对Selector并不陌生吧,下面来看看这段xml文件是如何定义的 <?xml version="1.0" encoding="ut ...
- Android中通过反射来设置Toast的显示时间
这个Toast的显示在Android中的用途还是非常大的,同一时候我们也知道toast显示的时间是不可控的.我们仅仅能改动他的显示样式和显示的位置,尽管他提供了一个显示时间的设置方法.可是那是没有效果 ...
- Android中字体颜色的设置
1.在Android中经常看到设置的颜色为八位的十六进制的颜色值,例如: 1 2 3 public static final class color { public static final ...
- android中在代码中设置margin属性
1,不多说,小知识点,直接上代码 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(15, 15);// 创 ...
- android中对Bitmap图片设置任意角为圆角
http://blog.csdn.net/l448288137/article/details/48276681 最近项目开发中使用到了圆角图片,网上找到的圆角图片控件大多比较死板,只可以全圆角.其中 ...
- 关于那些Android中不常用的设置属性
很多在manifest中的属性我们经常遗忘了它们,或者经常看到但又不是很明白它的作用.那么在这里我就拿了一些属性简单的解释一下,防止以后碰到却不知道其中的意思.不是很全,以后会断断续续的补充吧 一.a ...
- Android开发 从代码里设置Drawable图片不显示的问题
问题描述 我们从代码里获得Drawable在设置给View时会发现,图片不显示的问题.比如如下代码: Drawable drawable = getResources().getDrawable(R. ...
- Android中通过代码获取arrays.xml文件中的数据
android工程res/valuse文件夹下的arrays.xml文件中用于放各种数组数据,比如字符串数组.整型数组等,数组中的数据可能是具体的值,也有可能是对资源数据的引用,下面针对这两种情况通过 ...
随机推荐
- Spring.NET的IoC容器(The IoC container)——简介(Introduction)
简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...
- Linux内核转发技术
前言 在linux内核中,通常集成了带有封包过滤和防火墙功能的内核模块, 不同内核版本的模块名称不同, 在2.4.x版本及其以后的内核中, 其名称为iptables, 已取代了早期的ipchains和 ...
- String的解析
String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...
- react使用引入svg的icon;svg图形制作
由于手头的icon有限,需要使用更多的图标,就得找外援: 1.react安装icon插件,使用插件里已经有的图标 https://react-icons.netlify.com/#/ React Ic ...
- Android Design Support Library介绍之:环境搭建
在2015年的GoogleIO大会上.具体的Material Design设计规范出炉了.全新的Android Design Support Library 格.更让人开心的是,这些很酷的风格能够通过 ...
- iOS:XMPP即时聊天知识
XMPP即时聊天框架:XMPPFramework XMPP The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议). 基于XML XM ...
- Mysql5.6.x版本半同步主从复制的开启方法
介绍 先了解一下mysql的主从复制是什么回事,我们都知道,mysql主从复制是基于binlog的复制方式,而mysql默认的主从复制方式,其实是异步复制. 主库实际上并不关心从库是否把数据拉完没有, ...
- scrapy-splash抓取动态数据例子十六
一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息,输入给定关键字抓取微信资讯信息. 给定关键字:数字:融合:电 ...
- 2017.11.15 linux软件安装管理(todo)
学习来自:http://www.imooc.com/learn/447 第一章 介绍 第二章 软件包简介 1.源码包 2.二进制包(RPM包或系统默认包) 脚本安装包其实是别人把软件安装的脚本写好了, ...
- MySQL Win7 64位 下载、安装与配置图文教程
MySQL是目前十分流行的一种关系型数据库管理系统.官网推出的安装包有两种格式,分别是:ZIP格式和MSI格式.其中MSI格式的可以直接点击安装,按照它给出的安装提示进行安装,一般MySQL将会安装在 ...