废话不多说,直接阐述:

  前段时间在搞一个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中通过代码来设置蓝牙永久可见性的更多相关文章

  1. 【原创】如何在Android中为TextView动态设置drawableLeft等

    如何在Android中为TextView动态设置drawableLeft等   两种方式:   方式1:手动设置固有边界 Drawable drawable = getResources().getD ...

  2. android中ColorStateList及StateListDrawable设置Selector

    写过android的代码相信大家对Selector并不陌生吧,下面来看看这段xml文件是如何定义的 <?xml version="1.0" encoding="ut ...

  3. Android中通过反射来设置Toast的显示时间

    这个Toast的显示在Android中的用途还是非常大的,同一时候我们也知道toast显示的时间是不可控的.我们仅仅能改动他的显示样式和显示的位置,尽管他提供了一个显示时间的设置方法.可是那是没有效果 ...

  4. Android中字体颜色的设置

    1.在Android中经常看到设置的颜色为八位的十六进制的颜色值,例如: 1 2 3 public static final class color {     public static final ...

  5. android中在代码中设置margin属性

    1,不多说,小知识点,直接上代码 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(15, 15);// 创 ...

  6. android中对Bitmap图片设置任意角为圆角

    http://blog.csdn.net/l448288137/article/details/48276681 最近项目开发中使用到了圆角图片,网上找到的圆角图片控件大多比较死板,只可以全圆角.其中 ...

  7. 关于那些Android中不常用的设置属性

    很多在manifest中的属性我们经常遗忘了它们,或者经常看到但又不是很明白它的作用.那么在这里我就拿了一些属性简单的解释一下,防止以后碰到却不知道其中的意思.不是很全,以后会断断续续的补充吧 一.a ...

  8. Android开发 从代码里设置Drawable图片不显示的问题

    问题描述 我们从代码里获得Drawable在设置给View时会发现,图片不显示的问题.比如如下代码: Drawable drawable = getResources().getDrawable(R. ...

  9. Android中通过代码获取arrays.xml文件中的数据

    android工程res/valuse文件夹下的arrays.xml文件中用于放各种数组数据,比如字符串数组.整型数组等,数组中的数据可能是具体的值,也有可能是对资源数据的引用,下面针对这两种情况通过 ...

随机推荐

  1. Android Studio 首次安装取消自动下载SDK

    一.第一次安装: Android Studio安装完成后,第一次启动AS前,为了避免重新下载新版本的SDK,需要做如下操作: AS启动前,打开安装目录,请先将bin目录的idea.properties ...

  2. 打算安装个Ubuntu双系统,遇到了些基本概念问题(主分区、活动分区、扩展分区、逻辑分区)

    和运维的同事聊天,了解到: 1.XP系统时代(老的硬盘分区形式和分区表),最多允许建4个“主分区”,为了解决这个限制,就有了“扩展分区”的概念: 2.在“扩展分区”上,我们就可以建很多的“逻辑分区”, ...

  3. PHP超全局变量$_ENV详解,及$_ENV为空的可能原因

    PHP中的$_ENV存储了一些系统的环境变量,因为牵扯到实际的操作系统,所以不可能给出$_ENV的完整列表. $_ENV为空的可能原因:  你的php.ini的variables_order值为&qu ...

  4. Telnet协议详解

    转:http://www.cnblogs.com/dazhaxie/archive/2012/06/27/2566054.html 1. 概述 Telnet协议是TCP/IP协议族中的一员,是Inte ...

  5. Java使用纯真IP库获取IP对应省份和城市

    原文:http://blog.csdn.net/chwshuang/article/details/78027873?locationNum=10&fps=1 Java使用纯真IP库获取IP对 ...

  6. vmware三种网络连接模式区别

    vmware有三种网络连接模式分别是 桥接模式 相当于给虚拟机分配了一个和主机同一个子网下的ip,此时该虚拟机相当于同一子网中一台主机,可以访问子网中任意一台主机,也可以访问外网. NAT模式 虚拟机 ...

  7. List<实体>与List<String>数据互转

    1.List<实体>数据: public List<Device> queryOSDevice(String cpu,String ip,String name){ Strin ...

  8. requireJS简介和一个完整实例

    什么是 requireJS ? requireJS 是用JavaScript编写的JS框架,主要功能是可以按不同的先后依赖关系对 JavaScript 等文件的进行加载工作,可简单理解为JS文件的加载 ...

  9. http://zhidao.baidu.com/link?url=fX6C1xFLsqiuTY88cjwJYal2x52rOwlJstmz7KWyMc6l9j3FHw2yhvp83timZ86pwhqQ8rONj2xkgo2wbU2tLK

    http://zhidao.baidu.com/link?url=fX6C1xFLsqiuTY88cjwJYal2x52rOwlJstmz7KWyMc6l9j3FHw2yhvp83timZ86pwhq ...

  10. sqoop操作与使用

    sqoop只要安装到集群中的一台节点就可以了 1.上传sqoop到节点中 2.安装和配置 在添加sqoop到环境变量到/etc/profile中 将数据库连接驱动拷贝到$SQOOP_HOME/lib里 ...