C# 通过蓝牙从winRT向android/WP设备发送文件

C# 通过蓝牙从winRT向android/WP设备发送文件,c#,bluetooth,windows-runtime,C#,Bluetooth,Windows Runtime,我正在开发一个windows应用商店应用程序,并试图通过蓝牙向android(和windows phone)设备发送文件 基于一个实例,我编写了以下代码: public async static void SendAsync(StorageFile file) { var id = RfcommDeviceService.GetDeviceSelector(RfcommServiceId.ObexObjectPush); var devices = await DeviceInf

我正在开发一个windows应用商店应用程序,并试图通过蓝牙向android(和windows phone)设备发送文件

基于一个实例,我编写了以下代码:

public async static void SendAsync(StorageFile file)
{
    var id = RfcommDeviceService.GetDeviceSelector(RfcommServiceId.ObexObjectPush);
    var devices = await DeviceInformation.FindAllAsync(id);
    // -> Returns one windows phone and two android devices

    if (devices.Count > 0)
    {
        // Use the 3th device (android tablet)
        var service = await RfcommDeviceService.FromIdAsync(devices[2].Id);

         // Create a socket and connect to the target
         using (var socket = new StreamSocket())
         {
            await socket.ConnectAsync(
                service.ConnectionHostName,
                service.ConnectionServiceName,
                SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);


            byte[] bytes;
            using (var stream = await file.OpenStreamForReadAsync())
            {
                // stream.Length = 4621038
                bytes = new Byte[stream.Length];

                await stream.ReadAsync(bytes, 0, bytes.Length);
            }

            using (var dataWriter = new DataWriter(socket.OutputStream))
            {
                dataWriter.WriteBytes(bytes);
                Debug.WriteLine("Sending data...");
                var result = await dataWriter.StoreAsync();
                var flushed = await dataWriter.FlushAsync();
                dataWriter.DetachStream();
                Debug.WriteLine("Sending data finished. Result: " + result + " flushed: " +     flushed);
                // Output: 
                // Sending data...
                // Sending data finished. Result: 4621038 flushed: True
            }
        }
    }
}
Package.appxmanifest如下所示:

<m2:DeviceCapability Name="bluetooth.rfcomm">
    <m2:Device Id="any">
        <m2:Function Type="name:obexObjectPush" />
        <m2:Function Type="name:obexFileTransfer" />
        <m2:Function Type="name:genericFileTransfer" />
    </m2:Device>
</m2:DeviceCapability>

运行代码时,is似乎可以工作。应用程序询问“AppName是否可以使用您的[DeviceName]?”并且字节似乎已发送(dataWriter.StoreAsync()返回要发送的字节数)

android设备将被激活(灯亮)一秒钟。但仅此而已。我希望在android设备上收到一个请求,比如:“Windows 8尝试发送文件,接受是/否”,但我没有

发送的文件不在android设备上(通常,通过蓝牙发送的文件位于bluetooth文件夹中)

你有什么办法使它工作/发现错误吗

谢谢,

刚才只是一个简短的说明。OBEX有一个协议,它不仅仅发送原始文件。稍后我会写更多内容,但我们会看到如下内容:

CONNECT->
<-OK
PUT+filename+data->
<-CONTINUE
PUT+FINAL+data->
<-OK
disconnect
CONNECT->

要做到这一点,您必须实现obex协议连接、放置、断开连接操作。 请参阅此线程:

您的帖子中缺少链接。