安卓6.0后要读取ibeacon信号必须要开启定位服务所以我们必须要添加以下权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/>
接下来后就必须要动态申请权限了
/**
* android 6.0 以上需要动态申请权限
*/
private void initPermission() {
String[] permissions = {
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
};
ArrayList<String> toApplyList = new ArrayList<String>();
for (String perm : permissions) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
// 进入到这里代表没有权限.
}
}
String[] tmpList = new String[toApplyList.size()];
if (!toApplyList.isEmpty()) {
ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
}
}
接下判断系统是否打开了定位服务,否则就请用户去打开
/**
* 是否开启定位服务
* @param context content
* @return
*/
private boolean isLocationOpen(final Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
//gps定位
boolean isGpsProvider = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
//网络定位
boolean isNetWorkProvider = manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
return isGpsProvider|| isNetWorkProvider;
}
if (Build.VERSION.SDK_INT >= 23 && !isLocationOpen(getApplicationContext())) {
Intent enableLocate = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
Toast.makeText(this,"开启定位服务",Toast.LENGTH_SHORT);
startActivity(enableLocate);//打开定位服务
}
做完下面的工作就很简单了,集成第三方库或者自己写一个也是跟以前一样的
我是用SKYBeacon这个第三方库
连接 http://www.seekcy.com/wd5.html