我尝试了下面的代码。
public class NearbyConnectionUI extends HanSystemUI {
private ConnectionsClient mConnectionsClient;
private void startAdvertising(){
mConnectionsClient
.startAdvertising(
Settings.Secure.getString(mContext.getContentResolver(), "bluetooth_name"),
BuildConfig.APPLICATION_ID, // serviceID
new ConnectionLifecycleCallback() {
@Override
public void onConnectionInitiated(@NonNull String endpointID, @NonNull ConnectionInfo connectionInfo) {
Log.d(TAG, "onConnectionInitiated: endpointID : " + endpointID + "endpointName : " + connectionInfo.getEndpointName());
mNearbyConfirmDlg.setDeviceName(connectionInfo.getEndpointName());
mNearbyConfirmDlg.setConnectionConfirmInterface(result -> {
if ("ok".equals(result)) {
acceptConnection(endpointID);
} else {
}
});
mNearbyConfirmDlg.show();
}
@Override
public void onConnectionResult(@NonNull String endpointID, @NonNull ConnectionResolution connectionsResult) {
Log.d(TAG, "onConnectionResult: endpointID : " + endpointID + ", result : " + connectionsResult.getStatus().getStatusCode());
if (connectionsResult.getStatus().isSuccess()) {
}
}
@Override
public void onDisconnected(@NonNull String endpointID) {
Log.d(TAG, "onDisconnected: endpointID : " + endpointID);
}
},
new AdvertisingOptions.Builder().setStrategy(Strategy.P2P_STAR).build()
)
.addOnSuccessListener(
unusedResult ->
Log.d(TAG, "advertising success. endpointName : " +
Settings.Global.getString(mContext.getContentResolver(), Settings.Global.DEVICE_NAME))
)
.addOnFailureListener(
exception ->
Log.d(TAG, "advertising fail. exception : " + exception.getMessage())
);
}
}
我在蓝牙设置中将设备名称设置为“jaeHyun”。 当我运行广告时,蓝牙设置中其他设备上显示的名称将更改为随机字符串。例如“ISUEdvDFSAFEIOWFFD”。 当我运行 stopAdvertising() 时,集名称将正确显示。 我想设置它,以便即使我运行 startAdvertising(),它也显示为我设置的“我的设备”。
这是由于通过蓝牙进行广告造成的。您可以将 #setLowPower() 设置为 true,这样广告仅通过 BLE 执行,并且 BT 名称不受影响。