我有一个应用程序,需要使用蓝牙在设备之间发送4-5号码和2-3文本的数据,但我是java的新手,谷歌开发者页面的指南对我来说有点难以理解。
为了让任何愿意帮助我的人更容易,我会按照我迄今所做的步骤写下来。
1 即可。我在清单中要求权限:
public class LadderEntityBase : ICloneable
{
public LadderEntityBase(Guid pk)
{
PK = pk;
}
public LadderEntityBase() : this(Guid.NewGuid())
{
}
public Guid PK { get; set; }
public string Name { get; set; }
public string Comment { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
public class Order : LadderEntityBase
{
public Order() : base()
{
}
public Order(Guid guid) : base(guid)
{
}
public string OrderFrom { get; set; }
}
public class Parcel : LadderEntityBase
{
public Parcel() : base()
{
}
public Parcel(Guid guid) : base(guid)
{
}
public string SentTo { get; set; }
}
2 即可。我在我的活动中获得了默认适配器:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
第3 即可。我创建了一个按钮,当单击该按钮时,设备会扫描其他设备:
final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
4 即可。找到设备后,获取设备信息:
bt_scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//first checks if bluettoth is enabled
if (!mBluetoothAdapter.isEnabled()) {
//if not it enables it
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
// Register for broadcasts when a device is discovered.
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
}
});
5 即可。在销毁时取消注册ACTION_FOUND接收器:
// Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Discovery has found a device. Get the BluetoothDevice
// object and its info from the Intent.
BluetoothDevice device =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String deviceName = device.getName();
String deviceHardwareAddress = device.getAddress(); // MAC address
}
}
};
6 即可。我创建了第二个按钮,单击该按钮可启用可发现性(必须首先从设备 A 单击,以便扫描按钮在设备 B 中,找到设备 A ):
@Override
protected void onDestroy() {
super.onDestroy();
// Don't forget to unregister the *ACTION_FOUND* receiver.
unregisterReceiver(mReceiver);
}
问题:
A。在步骤 3 REQUEST_ENABLE_BT 是为了什么?
B。这是否需要在两台设备之间建立连接而没有任何问题?
C。如果我想连接两台以上的设备,还有什么我必须添加的吗?
答案 0 :(得分:1)
问。什么是REQUEST_ENABLE_BT
?
让我尝试评论代码
// If bluetooth is not switched on
if ( ! mBluetoothAdapter.isEnabled() ) {
// Create a system request to enable bluetooth
Intent enableBtIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE );
// Queue the request to pops the bluetooth dialogue
startActivityForResult( enableBtIntent, REQUEST_ENABLE_BT );
}
// Standby for device found, Bluetooth may still be disabled at this point
IntentFilter filter = new IntentFilter( BluetoothDevice.ACTION_FOUND );
registerReceiver( mReceiver, filter );
// Now that we are done, bluetooth dialogue will popup
// When it's done Android calls our onActivityResult
// (because we queued it with startActivityForResult).
问。这就是我需要建立连接吗?
我认为还有两个步骤需要做:
一个。在步骤3和步骤4之间找到设备。
启用蓝牙并不意味着它会自动扫描附近的设备,因为扫描会耗费电池并降低现有连接的质量。
但是,通过BLUETOOTH_ADMIN
权限,您的应用可以启动和停止扫描。
您也可以在不扫描的情况下获得以前配对的设备。
ACTION_FOUND
,这符合您的代码。Set
中找到,无需扫描或BLUETOOTH_ADMIN
,并且可以直接连接。 B中。建立4到5之间的数据连接。
设备连接类似于连接网络电缆。 计算机与IP物理连接,但您的程序仍需要打开套接字以进行实际数据传输。
InputStream
和OutputStream
进行。您似乎想制作一个M2M消息传递应用,因此我已经跳过低功耗蓝牙(BLE)。
问。如果我想连接两个以上的设备,那就是全部吗?
至于&#34;多重连接&#34;部分是关注,不,你不需要做任何特殊的事情来同时连接到多个设备。
&#34;管理&#34;但可以说是困难的部分。 例如,您通常希望保留设备列表,并且具有允许用户有选择地断开设备的UI,所有这些都必须响应意外断开连接或关闭蓝牙(由用户,其他应用程序或通过系统如低功耗模式)。
取决于您实际想要使用蓝牙设备做什么,您可能需要代码来记住每个人的状态。 再次进行错误处理。
所以,确实期望最终的代码会更加发达。
答案 1 :(得分:0)
我想回答问题A
:一种。在步骤3中REQUEST_ENABLE_BT用于什么?
private static final int REQUEST_ENABLE_BT = 1;
REQUEST_ENABLE_BT 只是一个标识您的请求的整数值。当您收到结果Intent时,回调onActivityResult(int requestCode, int resultCode, Intent data)
会向您提供相同的请求代码。通过这种方式,您可以处理来自其他活动的结果
假设您已经请求启用蓝牙的活动A
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
当设备的蓝牙启用时,将在活动A 上调用方法onActivityResult(int requestCode, int resultCode, Intent data)
。此方法onActivityResult()
是一种回调方法。蓝牙启用后,此方法会将请求代码传递回调用活动(活动A )。您必须在活动A 中覆盖此方法才能处理结果。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == REQUEST_ENABLE_BT)
Log.d("BLUETOOTH", "Successfully enabled");
}