这、个儿童游乐园设备厂家怎么用

安豆在CSDN的随便说
手把手教你做蓝牙聊天应用(三)-获取要连接的设备
第3节 获取要连接的设备
这一节我们开始设计蓝牙聊天应用的界面。根据之前的规划,连接管理将放在单独的ConnectionManager模块当中,所以每当要使用连接功能的时候,我们就暂时把它空着,等到ConnectionManager开发完成之后再加进来。
这里我们将完成下面的界面设计,
3.1 主界面
主界面是一个独立的Activity-ChatActivity,它要实现三个主要功能,
当蓝牙没有开启或者设备不能被发现的时候,请求用户打开对应的功能;
下方有输入框输入要发送的文字内容,点击按钮后能实现文字的发送;输入框上方的大部分区域用来显示聊天的内容;
菜单栏根据当前蓝牙连接的状态,显示不同的菜单项。例如,没有连接时启动蓝牙设备选择界面;
3.1.1 打开蓝牙功能
在ChatActivity创建的时候,查询当前蓝牙设备是否满足运行的要求,
提示开启蓝牙功能,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
BluetoothAdapter BTAdapter = BluetoothAdapter.getDefaultAdapter();
if (!BTAdapter.isEnabled()) {
Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(i);
提示开启被其它蓝牙设备发现的功能,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
if(BTAdapter.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
i.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
startActivity(i);
3.1.2 界面布局
界面布局比较简单,使用垂直的线性布局LinearLayout将界面分成两个区域,上面的大区域显示聊天的内容,用ListView的显示;下面文字输入和发送用TextEditor和ImageButton组合起来。
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
android:id="@+id/message_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:divider="#0000" ---数据项之间的分割行,设置成透明的,我们将用别的方式来区分每条数据项
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll" /&
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#000"/&
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" &
android:id="@+id/msg_editor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:imeOptions="actionSend"/&
android:id="@+id/send_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_content_add_circle" /&
在代码中,获取将来要操作的控件,
private ImageButton mSendB
private ListView mMessageListV
private EditText mMessageE
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
mMessageEditor = (EditText) findViewById(R.id.msg_editor);
mSendBtn = (ImageButton) findViewById(R.id.send_btn);
mMessageListView = (ListView) findViewById(R.id.message_list);
3.1.3 菜单项显示
菜单栏根据当前蓝牙连接的状态,显示不同的菜单项,
没有连接时,显示启动连接。点击该菜单,将启动显示可连接设备的Activity-DeviceListActivity;
正在连接时,显示取消。点击该菜单,将取消正在进行的连接;
已经连接时,显示断开连接。点击该菜单,将断开与其它设备已经建立好的连接;
由于这里要根据蓝牙设备连接的状况设计不同的逻辑,所以接下来设计的ConnectionManager要为其它模块提供获取当前连接状态的接口。
目前,我们就暂时将它设计成满足条件1的状况,
定义一个菜单main_menu.xml,
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:apps="http://schemas.android.com/apk/res-auto"&
android:id="@+id/connect_menu"
android:title="@string/connect"
apps:showAsAction="always"/&
android:id="@+id/about_menu"
android:title="@string/about"
apps:showAsAction="never"/&
将菜单添加到菜单栏中,
private MenuItem mConnectionMenuI
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main_menu, menu);
mConnectionMenuItem = menu.findItem(R.id.connect_menu);
return true;
响应菜单栏,启动DeviceListActivity获取可以连接到设备名称
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
case R.id.connect_menu: {
return true;
case R.id.about_menu: {
return true;
return false;
我们从ChatActivity启动DeviceListActivity,目的是要获取DeviceListActivity返回的内容-蓝牙设备的连接地址。所以不能简单的使用startActivity()方法了。
两个Activity之间传递数据,可以使用startActivityForResult()方法,这里面要设置一个ResultCode,用来主返回结果的时候使用辨别结果对应的是哪个请求,
private final int RESULT_CODE_BTDEVICE = 0;
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
case R.id.connect_menu: {
Intent i = new Intent(ChatActivity.this, DeviceListActivity.class);
startActivityForResult(i, RESULT_CODE_BTDEVICE);
return true;
返回的结果将在onActivityResult()函数中被通知到。这里参数的requestCode就是我们在startActivityForResult()中填入的那个数值;而resultCode代表另一个Activity是否如我们所愿返回了结果,
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RESULT_CODE_BTDEVICE && resultCode == RESULT_OK) {
String deviceAddr = data.getStringExtra("DEVICE_ADDR");
得到蓝牙设备的地址后,就可以通过ConnectionManager模块去连接设备了。
在蓝牙设备连接之前,是不需要编辑文字和发送内容的。所以,可以使用View的setEnabled()函数,将TextEditor和ImageButton给禁用掉(点击它们不会有任何响应)。等到设备连接上之后,在把它们开启。
mMessageEditor.setEnabled(false);
mSendBtn.setEnabled(false);
3.2 设备列表界面开发
为设备列表界面创建一个DeviceListActivity。
3.2.1 主界面布局
界面布局很简单,就是一个ListView,
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.anddle.anddlechat.MainActivity"
android:id="@+id/device_list"&
在代码中,设置上返回按钮,并获取这个ListView,以备将来使用,
private ListView mBTDeviceListV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_list_activity);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mBTDeviceListView = (ListView) findViewById(R.id.device_list);
为了展示可连接的蓝牙设备,我们会把收集到的可连接设备保存起来,通过ListView进行显示。
这里将自定义一个Adapter-DeviceItemAdapter,让它显示设备的名字和地址,
数据项的界面布局,
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="58dp"
android:padding="5dp"&
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/device_name"
android:gravity="center_vertical"
android:drawableLeft="@mipmap/ic_device_bluetooth"/&
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/device_info"
android:gravity="center_vertical|right"/&
自定义的DeviceItemAdapter将继承自ArrayAdapter,
public class DeviceItemAdapter extends ArrayAdapter&BluetoothDevice& {
private final LayoutInflater mI
private int mR
public DeviceItemAdapter(Context context, int resource) {
super(context, resource);
mInflater = LayoutInflater.from(context);
mResource =
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(mResource, parent, false);
TextView name = (TextView) convertView.findViewById(R.id.device_name);
TextView info = (TextView) convertView.findViewById(R.id.device_info);
BluetoothDevice device = getItem(position);
name.setText(device.getName());
info.setText(device.getAddress());
return convertV
使用ListView,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_list_activity);
DeviceItemAdapter adapter = new DeviceItemAdapter(this, R.layout.device_list_item);
mBTDeviceListView = (ListView) findViewById(R.id.device_list);
mBTDeviceListView.setAdapter(adapter);
3.2.2 展现可连接的设备
可连接的设备包括两种,
曾经连接过的,已经被系统记录在案,连接这种设备时,系统不会提示用户有设备需要配对;
完全新发现的设备,连接这种设备时,系统会提示用户有设备需要配对。
3.2.2.1 获取已绑定过的设备
获取第一种设备很简单,使用BluetoothAdapter的getBondedDevices()方法就可以了。找到后,添加到ListView中显示,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_list_activity);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set&BluetoothDevice& pairedDevices = mBluetoothAdapter.getBondedDevices();
DeviceItemAdapter adapter = (DeviceItemAdapter) mBTDeviceListView.getAdapter();
if (pairedDevices.size() & 0) {
for (BluetoothDevice device : pairedDevices) {
adapter.add(device);
3.2.2.2 获取新发现的设备
获取第二种设备,就采用技术验证时使用的mBluetoothAdapter.startDiscovery()方法;
首先要注册一个BroadcastReceiver,然后startDiscovery(),之后系统会发出BluetoothAdapter.ACTION_DISCOVERY_STARTED的广播,告知搜索开始;发出BluetoothAdapter.ACTION_DISCOVERY_FINISHED的广播,告知搜索结束,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_list_activity);
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(mReceiver, filter);
mBluetoothAdapter.startDiscovery();
根据收到的广播,更新显示列表。假如搜索到的设备是曾经绑定过的,说明之前已经加到设备列表里面了,这里不需要重复添加,
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
DeviceItemAdapter adapter = (DeviceItemAdapter) mBTDeviceListView.getAdapter();
adapter.add(device);
adapter.notifyDataSetChanged();
注意,这里能够在BroadcastReceiver的onReceive()方法中直接修改界面元素,是因为onReceive()是运行在UI线程-主线程当中的。
在DeviceListActivity销毁的时候,注销BroadcastReceiver,同时也别忘了取消可能正在进行的搜索,
protected void onDestroy() {
super.onDestroy();
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
unregisterReceiver(mReceiver);
至此,DeviceListActivity已经可以列出可被发现和连接到设备了。
3.2.3 设置菜单栏
设置菜单栏的菜单项device_menu.xml,让菜单项一直显示,
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:apps="http://schemas.android.com/apk/res-auto"&
android:id="@+id/search_menu"
android:title="@string/search"
apps:showAsAction="always"/&
我们将根据搜索设备的状态更改该菜单项的名称。所以,这里要定义当前搜索的状态,
当正在搜索的时候,显示取消,此时状态是BT_SEARCH_STATE_SEARCHING
当没有搜索的时候,显示搜索,此时对应的状态是BT_SEARCH_STATE_IDLE
这两种状态,都要记录下来,
private final int BT_SEARCH_STATE_IDLE = 0;
private final int BT_SEARCH_STATE_SEARCHING = 1;
private int mBTSearchingState = BT_SEARCH_STATE_IDLE;
在代码中添加菜单项,
private MenuItem mSearchMenuI
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.device_menu, menu);
mSearchMenuItem = menu.findItem(R.id.search_menu);
updateUI();
return true;
private void updateUI() {
switch (mBTSearchingState)
case BT_SEARCH_STATE_IDLE: {
if(mSearchMenuItem != null) {
mSearchMenuItem.setTitle(R.string.search);
case BT_SEARCH_STATE_SEARCHING: {
if(mSearchMenuItem != null) {
mSearchMenuItem.setTitle(R.string.cancel);
响应菜单项,
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
case R.id.search_menu:
if(mBTSearchingState == BT_SEARCH_STATE_IDLE) {
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
updateDeviceList();
else if(mBTSearchingState == BT_SEARCH_STATE_SEARCHING) {
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
case android.R.id.home:
this.finish();
return true;
为了更新菜单项,还需要BroadcastReceiver的配合,
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
mBTSearchingState = BT_SEARCH_STATE_SEARCHING;
updateUI();
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
mBTSearchingState = BT_SEARCH_STATE_IDLE;
updateUI();
3.3 得到要连接的设备
当用户点击要连接的设备后,将把该设备的地址返回给ChatActivity,由ChatActivity去连接设备。
为设备列表设置点击响应;
假如点击的时候还在进行搜索,取消搜索;
获取设备的地址,将它存储到Intent当中,最后通过setResult()方法,将结果传递给启动DeviceListActivity的Activity-ChatActivity,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_list_activity);
mBTDeviceListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view, int position, long id) {
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
ArrayAdapter adapter = (ArrayAdapter) mBTDeviceListView.getAdapter();
BluetoothDevice device = (BluetoothDevice) adapter.getItem(position);
Intent i = new Intent();
i.putExtra("DEVICE_ADDR", device.getAddress());
setResult(RESULT_OK, i);
点击之后,选中的设备地址会传递到ChatActivity的onActivityResult()方法中,
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RESULT_CODE_BTDEVICE && resultCode == RESULT_OK) {
String deviceAddr = data.getStringExtra("DEVICE_ADDR");
/*******************************************************************/
* 版权声明
* 本教程只在和发布,其他网站出现本教程均属侵权。
*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店中购买相关硬件。同时也感谢大家对我们这些码农的支持。
*最后再次感谢各位读者对安豆的支持,谢谢:)
/*******************************************************************/
Android Bluetooth 学习(3)蓝牙设备之间自动配对
经典蓝牙的连接通信
智能设备是如何连接云的
没有更多推荐了,
阅读我的最新系列文章:&&我有一台音响,和一个无线麦克风,但音响没有mic口,我要如何才能 ...
我有一台音响,和一个无线麦克风,但音响没有mic口,我要如何才能配合使用这两个设备,或者需要再购买些什
我有一台音响,和一个无线麦克风,但音响没有mic口,我要如何才能配合使用这两个设备,或者需要再购买些什
加1台前级效果器.连接方式:麦克风+音乐==&前级效果器===&功放==&音箱.
提问者的感言:谢谢您的解答!
其他回答2条
首先我想知道你要这套设备干什么用漫步者c200 相当于一个终端设备,你还缺少中间设备,如电脑或者其他音频设备(碟机、调音台等),话筒是要插在音频设备上的
有一个能插3个话筒的功放机 和一台一拖二的无线话筒 怎么做才能使多个你看看是不有个优先话筒插口!优先话筒插口是具有最高优先权的!当优先权的
问答为您推荐
市场价:¥680-¥740
网友正在问
||||||||||
Copyright (C)
Yesky.com, All Rights Reserved 版权所有 天极网络iPhone手机的这三个使用技巧,设置后手机好用十倍!
稿源:iphone中国
随着iPhone手机的不断发展,身边运用iPhone的朋友越来越多。作为全球智能手机的领先者,去年发布的iPhone X也引起了不小的轰动,且全球手机出货量更是前三。作为一名果粉,这三个iPhone手机使用技巧你不能不知道?1.关闭无线WiFi助理进入【设置】-【蜂窝移动网络】-【无线局域网助理】把这个选项关闭。这个功能会在我们的wifi连接信号较弱时自动运用我们的蜂窝移动数据,尤其对于流量本就不够用的用户来说更可怕。2.关闭短信二次提醒进入【设置】-【通知】-【信息】-【重复提醒】-【从不】即可。这个功能用处也并不大,毕竟现在我们已经很少发短信了,短信也基本上都是运营商以及各种动态码。所以,建议大家关闭。3.隐藏私密照片首先选择一张照片,点击【左下角箭头】-【隐藏】-【隐藏照片】就好了,这个功能可以有效保护我们的隐私。以上就是小编给大家总结的三个iPhone手机使用技巧,设置之后手机的速度也会有所提升,大家不妨试试看吧!
有好的文章希望站长之家帮助分享推广,猛戳这里
本网页浏览已超过3分钟,点击关闭或灰色背景,即可回到网页视频暂时不能查看
下载好看APP扫一扫 下载吧
您所浏览的视频已不在
《好看》依托百度技术,精准推荐优质短视频内容,懂你所好,量身打造最适合你的短视频客户端!请教大神这个设备是什么?如何使用?有没有教程相关资料,给个链接。设备全称:karaoke key_百度知道
请教大神这个设备是什么?如何使用?有没有教程相关资料,给个链接。设备全称:karaoke key
请教大神这个设备是什么?如何使用?有没有教程相关资料,给个链接。设备全称:karaoke key digital echo mixer fk-501.
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
从英文名称可知,是一个“卡拉OK”带数字混响的调音设备,相当于一个简易的调音台,应当配后续的功放,它本身不能推动扬声器。前面有3个话筒(MIC)插口,供演唱,后面可能还有信号输入插口(来自磁带、唱机、影碟机等),然后用那些旋钮调节各路音量、回声大小,通过后面的输出插口送往功放。现在影碟机、甚至以前的磁带录像机都包含这个功能,无需再插入这个设备,家庭应该没有什么用途,专业用又嫌太差了。
卡拉ok键数字回声混响前置机。(不是功放,是唱歌的设备)可以插麦克风唱歌,但需要连接 功放+音箱 才有声音。使用方法很简单,有音响的朋友都会操作唱歌的音响。
这是个功放。也不高档,很一般。
连接音箱后,不出声,,不会用。
怎么使用,我全然不知,能否教我
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 酿酒设备 的文章

 

随机推荐