登录
首页 » Java » Android 经典蓝牙(Classic Bluetooth)和低功耗蓝牙(BLE)

Android 经典蓝牙(Classic Bluetooth)和低功耗蓝牙(BLE)

于 2020-12-07 发布
0 194
下载积分: 1 下载次数: 1

代码说明:

从蓝牙4.0开始包含两个蓝牙芯片模块:传统/经典蓝牙模块(Classic Bluetooth,简称BT)和低功耗蓝牙(Bluetooth Low Energy,简称BLE) 经典蓝牙是在之前的蓝牙1.0,1.2,2.0 EDR,2.1 EDR,3.0 EDR等基础上发展和完善起来的, 而低功耗蓝牙是Nokia的Wibree标准上发展起来的,是完全不同两个标准。1.经典蓝牙模块(BT)泛指蓝牙4.0以下的模块,一般用于数据量比较大的传输,如:语音、音乐、较高数据量传输等。经典蓝牙模块可再细分为:传统蓝牙模块和高速蓝牙模块。传统蓝牙模块在2004年推出,主要代表是支持蓝牙2.1协议的模块,在智能手机爆发的时期得到广泛支持。高速蓝牙模块在2009年推出,速率提高到约24Mbps,是传统蓝牙模块的八倍。 传统蓝牙有3个功率级别,Class1,Class2,Class3,分别支持100m,10m,1m的传输距离2.低功耗蓝牙模块(BLE)泛指蓝牙4.0或更高的模块,蓝牙低功耗技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段。因为BLE技术采用非常快速的连接方式,因此平时可以处于“非连接”状态(节省能源),此时链路两端相互间只是知晓对方,只有在必要时才开启链路,然后在尽可能短的时间内关闭链路(每次最多传输20字节)。低功耗蓝牙无功率级别,一般发送功率在7dBm,一般在空旷距离,达到20m应该是没有问题

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • android百度地图经典实例app源码
    百度地图Android SDK v4.3.1 Sample共有28个Demo,每个Demo的说明如下:-------------------------------------------------------------------------------------一、Demo名称:基本地图功能文件名:  BaseMapDemo.java简介:创建一张百度地图并管理地图的生命周期详述:(1)创建一张最简单的百度地图;(2)管理地图的生命周期,具体请参看代码部分的相关注释;(3)可监听地图加载完成事件;(4)给出示例个性化地图、普通地图动态切换-------------------------------------------------------------------------------------二、Demo名称:MapFragment使用文件名:  MapFragmentDemo.java简介:介绍在Fragment框架下使用地图详述:(1)介绍了如何在Fragment框架下添加一个地图地图控件;-------------------------------------------------------------------------------------三、Demo名称:图层展示功能文件名:  LayersDemo.java简介:展示普通图、卫星图、交通流量图和百度城市热力图详述:(1)选择展示地图的图层为普通图或卫星图;(2)在普通图或卫星图上叠加交通流量图;(3)在普通图或卫星图上叠加百度城市热力图;-------------------------------------------------------------------------------------四、Demo名称:多地图展示文件名:  MultiMapViewDemo.java简介:介绍多MapView的使用详述:(1)在一个界面内,同时建立四个MapView控件;(2)地图Logo位置变更,支持6个位置,多图展示中只展示了4个位置-------------------------------------------------------------------------------------五、Demo名称:地图操作功能文件名:  MapControlDemo.java简介:介绍平移和缩放地图,双指操作地图,监听地图点击事件详述:(1)介绍地图缩放级别、旋转度和俯视度的get和set方法;(2)监听单击和长按地图事件;(3)单击、双击和长按地图获取该点的经纬度坐标;(4)对地图显示内容进行截图,截图保存地址为:/mnt/sdcard/test.png;-------------------------------------------------------------------------------------六、Demo名称:UI控制功能文件名:  UISettingsDemo.java简介:介绍开关手势功能和显示隐藏UI控件详述:(1)地图操作开关:平移、缩放、双击放大、双指操作(旋转度和俯视度);(2)控件显示开关:显示/隐藏缩放按钮;(3)指南针位置控制:显示在地图左上角或者右上角(仅举例),开发者可据实际情况任意改变位置;(4)底图标注开关:控制显示/隐藏底图POI,隐藏POI可得到仅显示道路信息的地图(5)禁用所有手势:控制是否一并禁止所有手势。(6)设置地图setPadding,防止UI遮挡Logo等。-------------------------------------------------------------------------------------七、Demo名称:定位图层展示文件名:  LocationOverlayDemo.java简介:介绍定位图层的基本用法详述:(1)可自定义更换位置图标,精度圈填充及边框颜色;(2)支持定位三态效果显示(普通态、跟随态、罗盘态);(3)百度地图SDK从2.0.0版本起,将定位功能进行了分离,具体使用方法请见定位SDK;(4)定位SDK开发指南详见http://developer.baidu.com/map/geosdk-android.htm;(5)支持开发者自定义精度圈边框和填充区域的颜色。-------------------------------------------------------------------------------------八、Demo名称:自定义绘制功能文件名:  GeometryDemo.java简介:介绍自定义绘制点、线、多边形、圆等几何图形和文字详述:(1)支持绘制凸多边形,如要绘制凹多边形请用三角形进行拼接;(2)支持绘制文字;-------------------------------------------------------------------------------------九、Demo名称:覆盖物功能文件名:  OverlayDemo.java简介:介绍添加覆盖物并响应点击功能和弹出pop功能详述:(1)在popup中添加弹出自定义View的示例;(2)点击周围4个Marker,弹出popup,可更新marker位置和更新marker图标;(3)中间显示的为图片图层,该图层可随地图的移动、缩放等做出相应的操作;(4)支持Maker设置透明度的方法,利用滑动条可以展示maker透明度变化;(5)支持Marker设置动画的能力,包含两种方式:从地上生长和从天上落下-------------------------------------------------------------------------------------十、Demo名称:热力图功能文件名:  HeatMapDemo.java简介绘制自有数据热力图详述:(1)设置热力图颜色;(2)准备数据、生成热力图;(3)删除热力图;-------------------------------------------------------------------------------------十一、Demo名称:地理编码功能文件名:  GeoCodeDemo.java简介:介绍地址信息与坐标之间的相互转换详述:(1)正向地理编码:将地址信息转换为经纬度坐标;(2)反向地理编码:将经纬度坐标转换为地址信息;-------------------------------------------------------------------------------------十二、Demo名称:POI搜索功能文件名:  POISearchDemo.java简介:介绍关键词查询、suggestion查询和查看餐饮类Place详情页功能详述:(1)点击某些关键词查询后的结果(如“餐厅”)可跳转到Place详情页;(2)提供suggestion查询进行联想查询,例如输入“天安门”则会弹出联想查询的列表;-------------------------------------------------------------------------------------十三、Demo名称:路径规划功能文件名:  RoutePlanDemo.java, CustomRouteOverlay.java简介:介绍跨城交通、公交、驾车、步行、骑行五种线路规划方法和自设路线方法详述:(1)驾车查询新增路径点查询功能,具体使用方法详见开发者指南路径规划部分,只需重载接口;(2)自设路线功能演示开发者如何自己设定一条路线,包括如何设定起点、终点、途径站点和路段;(3)自设路线功能同时也介绍如何在两个Activity之间切换的时候管理Mapview的生命周期;(4)可自定义路线的起终点图标;----------------------------------------------------------------------------------十四、Demo名称:行政区域边界数据检索文件名称:DistrictSearchDemo.java简介:介绍如何使用行政区域边界数据检索功能,绘制行政区覆盖物和边框详述:(1)通过输入省、市、区/县的名称,绘制出行政区覆盖物和边框----------------------------------------------------------------------------------十五、Demo名称:公交线路查询功能文件名:  BusLineDemo.java简介:介绍查询公交线路功能(1)点击“开始”按钮可查询公交线路;(2)搜索出公交线路后点击“下一条”按钮可查询该线路的反方向公交线路;-------------------------------------------------------------------------------------十六、Demo名称:短串分享功能文件名:  ShareDemo.java简介:将POI点、反Geo点和公交/驾车/骑行/步行线路规划,生成短链接以分享给好友详述:(1)将POI点、反Geo点和公交/驾车/骑行/步行线路规划,生成短链接串,此链接可通过短信等形式分享给好友;(2)好友在终端设备点击此链接可快速打开Web地图、百度地图客户端进行信息展示;(3)暂时开放了“POI搜索结果分享”、“公交/驾车/骑行/步行线路规划”和“反向地理编码结果分享”;(4)日后会开放更多的功能,欢迎广大开发者使用短串分享功能;-------------------------------------------------------------------------------------十七、Demo名称:离线地图功能文件名:  OfflineDemo.java简介:介绍如何下载和使用离线地图详述:(1)可以搜索、下载、删除、查看离线地图;-------------------------------------------------------------------------------------十八、Demo名称:周边雷达功能--RadarDemo文件名:RadarDemo.java注意:需要把应用的key在官网的雷达注册页面进行相关的注册才能使用!注册网址:http://developer.baidu.com/map/index.php?title=radar简介:介绍如果使用周边雷达功能上传位置、检索周边的人详述:(1)获取位置信息并单次上传服务端;(2)获取位置信息连续上传服务端;(3)检索周边用户的位置;(4)用列表的形式及地图的形式展示周边用户的位置等信息;-------------------------------------------------------------------------------------十九、Demo名称:调启百度地图文件名:  OpenBaiduMap.java简介:介绍如果利用简单接口调用,开启百度地图客户端实现复杂逻辑业务详述:(1)调启百度地图导航(Native);(2)调启百度地图导航(Web);(3)调启百度地图POI周边检索;(4)调启百度地图POI详情检索;(5)调启百度地图步行线路规划;(6)调启百度地图驾车线路规划;(7)调启百度地图公交线路规划;(8)调启百度地图步行导航;(需百度地图App 8.6.6以上版本支持)(9)调启百度地图骑行导航(需百度地图App 8.6.6以上版本支持) (10) 调启百度地图poi点全景展示; (11) 调启百度地图步行AR导航;-------------------------------------------------------------------------------------二十、Demo名称:点收藏功能--FavoriteDemo文件名:FavoriteDemo.java简介:介绍如何创建、管理本地点数据详述:(1)新建本地点收藏;(2)查看已收藏本地点;(3)删除已收藏本地点;-------------------------------------------------------------------------------------二十一、Demo名称:LBS.云检索功能文件名:  CloudSearchDemo.java简介:介绍如何使用LBS.云检索用户自有数据注意:自v2.2.0起,SDK支持LBS云v2版的检索,使用v1版的用户请尽快完成升级或使用较低SDK版本。详述:(1)LBS.云是百度地图针对LBS开发者推出的平台级服务;(2)提供海量位置数据存储、检索、展示一体化解决方案;(3)该服务对开发者免费开放;(4)Demo中放入了测试用ak,开发者若使用自己的数据,请更换为自己的ak;(5)LBS.云检索使用方法请参考开发指南“LBS云服务”部分;(6)详细了解LBS.云,欢迎访问:http://developer.baidu.com/map/lbs-cloud.htm(7)申请ak及管理数据等问题,欢迎访问LBS开放平台官网:http://lbsyun.baidu.com/-------------------------------------------------------------------------------------二十二、Demo名称:OpenGL绘制功能文件名:  OpenGLDemo.java简介:介绍如何使用OpenGL在地图上实现自定义绘制详述:(1)利用OpenGL绘制基本折线;(2)利用OpenGL在地图上进行纹理绘制;-------------------------------------------------------------------------------------二十三、Demo名称:点聚合功能--MakerClusterDemo文件名:  MarkerClusterDemo.java简介:新增点聚合功能,可通过缩小地图层级,将定义范围内的多个标注点,聚合显示成一个标注点详述:(1)支持缩放地图,实现点聚合功能-------------------------------------------------------------------------------------二十四、Demo名称:瓦片图功能--TileOverlayDemo文件名:TileOverlayDemo.java简介:瓦片图层支持开发者添加自有瓦片数据,包括在线下载和本地加载两种方式。详述:(1)在线下载方式(2)本地加载方式(3)将地图类型设置为NONE,不下载地图底图瓦片(4)控制了地图显示范围,仅显示设置范围内的地图-------------------------------------------------------------------------------------二十五、Demo名称:地图由TextureView渲染文件名:TextureMapViewDemo.java使用前提:Android 4.0以上系统,并开启强制GPU渲染简介:新增了TextureMapView类,实现地图由TextureView渲染。解决原MapView基于系统GLSurfaceView导致在TabHost和scrollView中等闪黑屏、白边、压盖等问题。-------------------------------------------------------------------------------------二十六、Demo名称: 室内图--IndoorMapDemo文件名称: IndoorMapDemo.java简介:介绍如何进行室内图展示及室内路线规划详述:    (1)室内图展示,包含打开、关闭室内图方法    (2)室内路线规划(只支持起终点在同一建筑物内),绘制室内规划路线----------------------------------------------------------------------------------二十七、Demo名称: 室内图检索文件名称: IndoorSearchDemo.java简介:介绍在室内图中进行室内poi检索----------------------------------------------------------------------------------二十八、Demo名称: 小车轨迹平滑移动文件名称: TrackShowDemo.java简介:介绍小车轨迹平滑移动的实现----------------------------------------------------------------------------------
    2019-03-12下载
    积分:1
  • json实现android客户端与服务端的通讯(含服务器端和客户端源码) 实例下载
    服务器端和android客户端程序都有
    2013-02-07下载
    积分:1
  • java 扫雷小游戏 源码下载
    java 扫雷小游戏 源码下载
    2014-08-11下载
    积分:1
  • android 仿微信浏览相册图片例子源码下载
    [实例简介] 仿微信浏览相册图片, 相册浏览 [实例截图] [核心代码]import java.io.File;import java.io.FilenameFilter;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.List;import android.app.Activity;import android.app.ProgressDialog;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.provider.MediaStore;import android.util.DisplayMetrics;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.view.WindowManager;import android.widget.GridView;import android.widget.PopupWindow.OnDismissListener;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.zhy.bean.ImageFloder;import com.zhy.imageloader.ListImageDirPopupWindow.OnImageDirSelected;public class MainActivity extends Activity implements OnImageDirSelected{ private ProgressDialog mProgressDialog; /** * 存储文件夹中的图片数量 */ private int mPicsSize; /** * 图片数量最多的文件夹 */ private File mImgDir; /** * 所有的图片 */ private List mImgs; private GridView mGirdView; private MyAdapter mAdapter; /** * 临时的辅助类,用于防止同一个文件夹的多次扫描 */ private HashSet mDirPaths = new HashSet(); /** * 扫描拿到所有的图片文件夹 */ private List mImageFloders = new ArrayList(); private RelativeLayout mBottomLy; private TextView mChooseDir; private TextView mImageCount; int totalCount = 0; private int mScreenHeight; private ListImageDirPopupWindow mListImageDirPopupWindow; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { mProgressDialog.dismiss(); // 为View绑定数据 data2View(); // 初始化展示文件夹的popupWindw initListDirPopupWindw(); } }; /** * 为View绑定数据 */ private void data2View() { if (mImgDir == null) { Toast.makeText(getApplicationContext(), "擦,一张图片没扫描到", Toast.LENGTH_SHORT).show(); return; } mImgs = Arrays.asList(mImgDir.list()); /** * 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗; */ mAdapter = new MyAdapter(getApplicationContext(), mImgs, R.layout.grid_item, mImgDir.getAbsolutePath()); mGirdView.setAdapter(mAdapter); mImageCount.setText(totalCount "张"); }; /** * 初始化展示文件夹的popupWindw */ private void initListDirPopupWindw() { mListImageDirPopupWindow = new ListImageDirPopupWindow( LayoutParams.MATCH_PARENT, (int) (mScreenHeight * 0.7), mImageFloders, LayoutInflater.from(getApplicationContext()) .inflate(R.layout.list_dir, null)); mListImageDirPopupWindow.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { // 设置背景颜色变暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 1.0f; getWindow().setAttributes(lp); } }); // 设置选择文件夹的回调 mListImageDirPopupWindow.setOnImageDirSelected(this); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DisplayMetrics outMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(outMetrics); mScreenHeight = outMetrics.heightPixels; initView(); getImages(); initEvent(); } /** * 利用ContentProvider扫描手机中的图片,此方法在运行在子线程中 完成图片的扫描,最终获得jpg最多的那个文件夹 */ private void getImages() { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "暂无外部存储", Toast.LENGTH_SHORT).show(); return; } // 显示进度条 mProgressDialog = ProgressDialog.show(this, null, "正在加载..."); new Thread(new Runnable() { @Override public void run() { String firstImage = null; Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver mContentResolver = MainActivity.this .getContentResolver(); // 只查询jpeg和png的图片 Cursor mCursor = mContentResolver.query(mImageUri, null, MediaStore.Images.Media.MIME_TYPE "=? or " MediaStore.Images.Media.MIME_TYPE "=?", new String[] { "image/jpeg", "image/png" }, MediaStore.Images.Media.DATE_MODIFIED); Log.e("TAG", mCursor.getCount() ""); while (mCursor.moveToNext()) { // 获取图片的路径 String path = mCursor.getString(mCursor .getColumnIndex(MediaStore.Images.Media.DATA)); Log.e("TAG", path); // 拿到第一张图片的路径 if (firstImage == null) firstImage = path; // 获取该图片的父路径名 File parentFile = new File(path).getParentFile(); if (parentFile == null) continue; String dirPath = parentFile.getAbsolutePath(); ImageFloder imageFloder = null; // 利用一个HashSet防止多次扫描同一个文件夹(不加这个判断,图片多起来还是相当恐怖的~~) if (mDirPaths.contains(dirPath)) { continue; } else { mDirPaths.add(dirPath); // 初始化imageFloder imageFloder = new ImageFloder(); imageFloder.setDir(dirPath); imageFloder.setFirstImagePath(path); } int picSize = parentFile.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { if (filename.endsWith(".jpg") || filename.endsWith(".png") || filename.endsWith(".jpeg")) return true; return false; } }).length; totalCount = picSize; imageFloder.setCount(picSize); mImageFloders.add(imageFloder); if (picSize > mPicsSize) { mPicsSize = picSize; mImgDir = parentFile; } } mCursor.close(); // 扫描完成,辅助的HashSet也就可以释放内存了 mDirPaths = null; // 通知Handler扫描图片完成 mHandler.sendEmptyMessage(0x110); } }).start(); } /** * 初始化View */ private void initView() { mGirdView = (GridView) findViewById(R.id.id_gridView); mChooseDir = (TextView) findViewById(R.id.id_choose_dir); mImageCount = (TextView) findViewById(R.id.id_total_count); mBottomLy = (RelativeLayout) findViewById(R.id.id_bottom_ly); } private void initEvent() { /** * 为底部的布局设置点击事件,弹出popupWindow */ mBottomLy.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mListImageDirPopupWindow .setAnimationStyle(R.style.anim_popup_dir); mListImageDirPopupWindow.showAsDropDown(mBottomLy, 0, 0); // 设置背景颜色变暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = .3f; getWindow().setAttributes(lp); } }); } @Override public void selected(ImageFloder floder) { mImgDir = new File(floder.getDir()); mImgs = Arrays.asList(mImgDir.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { if (filename.endsWith(".jpg") || filename.endsWith(".png") || filename.endsWith(".jpeg")) return true; return false; } })); /** * 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗; */ mAdapter = new MyAdapter(getApplicationContext(), mImgs, R.layout.grid_item, mImgDir.getAbsolutePath()); mGirdView.setAdapter(mAdapter); // mAdapter.notifyDataSetChanged(); mImageCount.setText(floder.getCount() "张"); mChooseDir.setText(floder.getName()); mListImageDirPopupWindow.dismiss(); }}
    2015-04-08下载
    积分:1
  • 微博社会化 sdk 实例源码下载demo
    微博社会化 sdk 实例源码下载demo
    2015-04-15下载
    积分:1
  • 简单的popmenu
    简单的popmenu
    2015-08-29下载
    积分:1
  • 安卓图表引擎AChartEngine 实例源码下载
    用于网页端基于achartengine开放的曲线
    2015-04-14下载
    积分:1
  • 自定义TextView
    解决textView的换行问题
    2021-03-13 18:19:24下载
    积分:1
  • android布局中动态添加控件
    android布局中动态添加控件
    2015-04-22下载
    积分:1
  • 讀取簡訊
    讀取簡訊
    2014-01-25下载
    积分:1
  • 696518资源总数
  • 105877会员总数
  • 14今日下载