Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
应用所有界面都是横屏显示的,调用开始蓝牙的代码,开启蓝牙界面是竖屏的,屏幕发生旋转给用户的体验不好,如何让开启蓝牙的界面也是横屏的?
这种问题在华为honor v8手机上没有,魅族S3和oppo R9手机上出现了。
效果如下图:
startActivityForResult来启动蓝牙开启界面就会向楼主说的那样,横屏显示界面。测试发现,不适用startActivityForResult的是形式,直接适用bluetoothtAdapter.enable()强制开启,就不会出现这个显现了。
在AndroidManifest.xml里固定死activity的横屏模式就行了。别在java代码去设置横屏,这样只是临时状态
两种方法:
1 代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.disable_android_orientation_change);
...............
}
2 AndroidManifest.xml文件
<activity android:name=".DisableScreenRotationAndroid" android:screenOrientation="landscape">
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢
哥们 解决了吗? 求指教
BluetoothAdapter类中的enable()方法我是知道的,它是暴力打开蓝牙的一种方式,因为官方文档对它的介绍,导致我没有使用它,感觉被误导了,什么事还是
亲自试验了才知道.
enable()方法官网介绍 "点击进入")
官网中明确指出了If you want to turn on Bluetooth in order to create a wireless connection,you should use the ACTION_REQUEST_ENABLE
Intent, which will raise a dialog that requests user permission to turn on Bluetooth.我看到这之后就坚信使用startActivityForResult(intent)来
打开蓝牙建立无线连接了,enable()这个方法在低版本的Android手机中是没有任何提醒,直接打开蓝牙的,最初我还以为通过这种方式打开蓝牙不能建立
无线连接,直至昨天下午把我身边的测试机试了一遍,发现这个API还是可以用的,从目前的效果来看应该说是很好用。
不过多少还是有隐隐的担忧,官方文档的介绍并不推荐采用这种方式,不知道是不是哪些地方有隐患?
下面说一下使用enable()这种方式测试的结果:
一般新出的机型调用这个API还是会弹框提醒的,并不是默默的强制打开蓝牙(华为荣耀V8、小米5、Oppo R9)
有些手机并没有弹框提醒(多为Android低版本手机 例如小米手机 红米2A)
魅族S3手机弹框提醒打开蓝牙,若是拒绝之后,之后不再弹框提醒,发现应用权限管理里面关于打开蓝牙的权限已经是禁止了,但是弹框的时候并没有看到
下次不再弹框提醒的选项,这个稍微有点坑,其它手机若是拒绝打开,下次进入应用还是会继续提醒打开的.
虽然对于这个方法有些隐隐的担忧,但是它还是解决了我之前提出的问题:
除了强制打开不弹框提醒的手机之外,只要是弹出对话框提醒的手机都是在横屏状态弹出的对话框,屏幕并未发生旋转,很好的解决了之前的问题.
现在项目中已经在使用enable()这种方式打开蓝牙了,后期如果遇到坑,会继续更新问答.
下面简单说一下enable()的使用:
因为这种打开蓝牙的方式是异步的,在调用enable()方法之后,我们需要注册广播监听BluetoothAdapter.ACTION_STATE_CHANGED的改变,当它的
BluetoothAdapter.EXTRA_STATE状态为BluetoothAdapter.STATE_ON时说明蓝牙已经打开成功,这时可以进行扫描设备连接设备的操作.