Android 设置中的蓝牙
来源:互联网 发布:手机淘宝在线客服人工 编辑:程序博客网 时间:2024/05/11 14:35
话不多说直接上代码:
1.Activity:
package com.vstar3d.buletoothdemo;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothSocket;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.CompoundButton;import android.widget.ListView;import android.widget.Switch;import android.widget.TextView;import android.widget.Toast;import java.io.IOException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import java.util.UUID;public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener, AdapterView.OnItemClickListener { private TextView textswitch, textprompt, texttilte; private Switch switchview; private BluetoothAdapter mBluetoothAdapter; private Button button; private ListView lvNewDevices; private BuleToothAdapter adapter; private List<PhoneDate> list = new ArrayList<PhoneDate>(); private PhoneDate phoneDate = new PhoneDate(); List<String> lstDevices = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textswitch = (TextView) findViewById(R.id.textswitch); textprompt = (TextView) findViewById(R.id.textprompt); textprompt.setVisibility(View.VISIBLE); texttilte = (TextView) findViewById(R.id.texttilte); switchview = (Switch) findViewById(R.id.switchview); lvNewDevices = (ListView) findViewById(R.id.listview_prompt); button = (Button) findViewById(R.id.button); adapter = new BuleToothAdapter(this, lstDevices); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null) { Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show(); return; } IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BluetoothDevice.ACTION_FOUND); intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED); intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(mReceiver, intentFilter); switchview.setOnCheckedChangeListener(this); lvNewDevices.setOnItemClickListener(this); lvNewDevices.setAdapter(adapter); adapter.notifyDataSetChanged(); } public void onClick(View view) { button.setEnabled(false); button.setText("搜索中..."); setTitle("搜索中..."); if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_OFF) { Toast.makeText(MainActivity.this, "请先打开蓝牙", Toast.LENGTH_SHORT).show(); return; } if (mBluetoothAdapter.isDiscovering()) mBluetoothAdapter.cancelDiscovery(); list.clear(); Object[] lstDevice = mBluetoothAdapter.getBondedDevices().toArray(); for (int i = 0; i < lstDevice.length; i++) { BluetoothDevice device = (BluetoothDevice) lstDevice[i]; String str = "已配对|" + device.getName() + "|" + device.getAddress(); phoneDate.setConnectState(device.getBondState()); phoneDate.setName(str); lstDevices.add(str); adapter.notifyDataSetChanged(); } mBluetoothAdapter.startDiscovery(); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { textprompt.setVisibility(View.GONE); textswitch.setText("开启"); mBluetoothAdapter.enable();//打开蓝牙 Intent discoverableIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra( BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0); startActivity(discoverableIntent); mBluetoothAdapter.getAddress(); mBluetoothAdapter.getName(); } else { textprompt.setVisibility(View.VISIBLE); textswitch.setText("关闭"); mBluetoothAdapter.disable();//关闭蓝牙 } } private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Bundle b = intent.getExtras(); Object[] lstName = b.keySet().toArray(); // 显示所有收到的消息及其细节 for (int i = 0; i < lstName.length; i++) { String keyName = lstName[i].toString(); Log.e(keyName, String.valueOf(b.get(keyName))); } BluetoothDevice device = null; // 搜索设备时,取得设备的MAC地址 if (BluetoothDevice.ACTION_FOUND.equals(action)) { device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (device.getBondState() == BluetoothDevice.BOND_NONE) { String str = "未配对|" + device.getName() + "|" + device.getAddress(); if (list.indexOf(str) == -1)// 防止重复添加 phoneDate.setConnectState(device.getBondState()); phoneDate.setName(str); // list.add(phoneDate); // 获取设备名称和mac地址 lstDevices.add(str); adapter.notifyDataSetChanged(); } } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) { device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); switch (device.getBondState()) { case BluetoothDevice.BOND_BONDING: Log.d("BlueToothTestActivity", "正在配对......"); break; case BluetoothDevice.BOND_BONDED: Log.d("BlueToothTestActivity", "完成配对"); try { connect(device);//连接设备 } catch (IOException e) { e.printStackTrace(); } break; case BluetoothDevice.BOND_NONE: Log.d("BlueToothTestActivity", "取消配对"); default: break; } } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { button.setEnabled(true); setTitle("蓝牙"); button.setText("搜索设备"); } } }; private void connect(BluetoothDevice device) throws IOException { // 固定的UUID final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB"; UUID uuid = UUID.fromString(SPP_UUID); BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid); socket.connect(); } @Override protected void onDestroy() { super.onDestroy(); if (mBluetoothAdapter != null) { mBluetoothAdapter.cancelDiscovery(); } unregisterReceiver(mReceiver); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mBluetoothAdapter.isDiscovering()) mBluetoothAdapter.cancelDiscovery(); String str = lstDevices.get(position); String[] values = str.split("\\|"); String address = values[2]; Log.e("address", values[2]); BluetoothDevice btDev = mBluetoothAdapter.getRemoteDevice(address); try { Boolean returnValue = false; if (btDev.getBondState() == BluetoothDevice.BOND_NONE) { Method createBondMethod = BluetoothDevice.class .getMethod("createBond"); Log.d("BlueToothTestActivity", "开始配对"); returnValue = (Boolean) createBondMethod.invoke(btDev); } else if (btDev.getBondState() == BluetoothDevice.BOND_BONDED) { connect(btDev); } } catch (Exception e) { e.printStackTrace(); } }}
2.adapter:
package com.vstar3d.buletoothdemo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;public class BuleToothAdapter extends BaseAdapter { private Context mContext; private List<String> list; public BuleToothAdapter(Context mContext, List<String> list) { this.mContext = mContext; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.layout_buletooth_adapter,null); viewHolder = new ViewHolder(); viewHolder.textView = (TextView) convertView.findViewById(R.id.textView); viewHolder.isconnect = (TextView) convertView.findViewById(R.id.isconnect); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } String stringTitle = list.get(position); viewHolder.textView.setText(stringTitle); return convertView; } class ViewHolder{ TextView textView; TextView isconnect; }}
3.权限:
<uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
4.布局:acvivity_main
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#968366"> <TextView android:id="@+id/textswitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_centerVertical="true" android:layout_marginLeft="59dp" android:layout_marginStart="59dp" android:text="关闭" android:textSize="20sp" /> <Switch android:id="@+id/switchview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginEnd="38dp" android:layout_marginRight="38dp" /> </RelativeLayout> <TextView android:id="@+id/textprompt" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:maxLines="2" android:paddingLeft="20dp" android:paddingRight="20dp" android:text="开启蓝牙后,您的设备可以与附近的其他蓝牙设备通信。" android:textSize="20sp" android:visibility="gone" /> <TextView android:id="@+id/texttilte" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="1dp" android:background="#ff848484" android:paddingBottom="5dp" android:paddingLeft="10dp" android:paddingTop="5dp" android:text="可用设备" android:textColor="#ff66ff00" android:textSize="16sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listview_prompt" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:onClick="onClick" android:text="搜索设备" /> </RelativeLayout></LinearLayout>layout_adapter:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:drawableLeft="@mipmap/bluetooth" android:drawableRight="@mipmap/arrowright" android:ellipsize="middle" android:gravity="left|center" android:maxLines="1" android:paddingBottom="5dp" android:paddingLeft="15dp" android:paddingRight="15dp" android:paddingTop="5dp" android:text="手机型号:" android:textSize="18sp" /> <TextView android:id="@+id/isconnect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginBottom="2dp" android:layout_marginEnd="61dp" android:layout_marginRight="61dp" /></RelativeLayout>
5.实际效果图:
0 0
- Android 设置中的蓝牙
- Android蓝牙设置连接
- Android中的蓝牙
- Android中的蓝牙系统
- Android中的蓝牙知识
- Android 中的蓝牙模块
- android中的无线通信蓝牙
- Android 蓝牙开发之一设置蓝牙
- Android 打开系统蓝牙设置
- Android 打开系统蓝牙设置
- android中的蓝牙那些事
- Android 蓝牙开发中的问题
- Android 应用程序中-设置-蓝牙,隐藏蓝牙功能
- 关于android蓝牙开发中 蓝牙可见性设置
- android-设置蓝牙的可见性
- android bluetooth开发基础-4设置蓝牙
- 关于android蓝牙可见性设置
- Android中的蓝牙Bluetooth应用开发基础
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- Android初级教程理论知识(第八章网络编程二)
- gem下安装sass错误
- 1、RedHat6 HA集群理论与环境
- 实时监控、直播流、流媒体、视频网站开发方案设计简要
- Android 设置中的蓝牙
- Android之FlowLayout流式布局
- Lua笔记 & 与C之间的交互
- 缩放ImageView
- C++网络编程服务器select模型(参考)
- mysql 批量更改符合指定条件的记录的主键为一系列值
- 字符的左右移动-java
- 安卓自定义搜索框(searchview)
- Python3 简介