Skip to content

Commit 6b140c8

Browse files
author
VegeChou
committed
add Android 6.0 使用文档
1 parent a06a89a commit 6b140c8

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
SENSORO SDK 在 Android 6.0 中的使用
2+
=================
3+
4+
> 作者:SENSORO
5+
>
6+
> 版本:v1.0
7+
>
8+
> 日期:2015-10-27 18:55:21
9+
10+
### 背景介绍
11+
在 Android 6.0 系统中,Google 将 BLE 的设备扫描与位置服务相关联。经测试,在开发中过程中,如果想要成功检测到 BLE 设备,必须申请访问位置服务权限 `ACCESS_FINE_LOCATION` 或者 `ACCESS_COARSE_LOCATION`
12+
13+
而在 Android 6.0 系统中, 新的权限机制 `Runtime Permissions` 需要在 App 运行时获得权限,因此在使用 SDK 的过程中,App 需要动态申请上述权限来保证正常运行。
14+
15+
*说明:在 Android 6.0+ 中,App 在运行过程中,必须保持定位开启,才能成功扫描到 BLE 设备。*
16+
17+
### 使用方法
18+
19+
> 以下的方法适用于 targetSdkVersion >= 23 的 App,targetSdkVersion < 23 的 App 可以暂不用考虑
20+
21+
在 AndroidManifest.xml 文件中添加权限申请:
22+
23+
```
24+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
25+
```
26+
27+
在 App 启动的第一个 Acitivy 中 `onCreate` 函数中添加以下代码:
28+
29+
```
30+
...
31+
@Override
32+
protected void onCreate(Bundle savedInstanceState) {
33+
super.onCreate(savedInstanceState);
34+
setContentView(R.layout.activity_main);
35+
36+
requirePermission();
37+
}
38+
39+
@Override
40+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
41+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
42+
switch (requestCode) {
43+
case MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION: {
44+
// If request is cancelled, the result arrays are empty.
45+
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
46+
// 用户授权成功
47+
Log.v(TAG,"permission was granted");
48+
// 业务逻辑
49+
} else {
50+
// 申请权限被用户拒绝,相关功能不可使用
51+
Log.v(TAG,"permission denied");
52+
}
53+
}
54+
// 其他 'case' 可能是 App 申请的其他权限
55+
}
56+
}
57+
58+
public void requirePermission(){
59+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
60+
// 业务逻辑
61+
} else {
62+
// 是否应该给用户提示说明?
63+
if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)
64+
!= PackageManager.PERMISSION_GRANTED) {
65+
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
66+
Manifest.permission.ACCESS_COARSE_LOCATION)) {
67+
// 异步方式提示用户,不要阻塞在这等待用户响应。当用户看到提示之后,尝试重新获取权限
68+
Log.v(TAG, "Show an expanation to the user *asynchronously*");
69+
} else {
70+
// 不需要提示说明,直接获取权限
71+
Log.v(TAG,"// No explanation needed, we can request the permission.");
72+
ActivityCompat.requestPermissions(this,new String[]{
73+
Manifest.permission.ACCESS_COARSE_LOCATION},
74+
MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
75+
}
76+
} else {
77+
// 业务逻辑
78+
}
79+
}
80+
}
81+
...
82+
```

0 commit comments

Comments
 (0)