Search code examples
androidsamsung-mobiletizen-web-apptizen-wearable-sdksamsung-mobile-sdk

Gear SDK SAFileTransfer FILE_IO error


I'm trying to send file from Android host to Samsung Gear device using Samsung Mobile SDK no matter how had I try, always get FILE_IO error.

I was trying all available permissions (on both sides).

Could anyone send me any hint?

Android side:

String filename = "file:///storage/emulated/0/Download/TestRecipe2-25.zip"; 
if (mGuruAgentService != null) mGuruAgentService.sendFile(filename);

public int sendFile(String fileName) {
  if (mFileTransfer == null)
    registerForFileTransfer();
  if (mFileTransfer != null) {


  try {
    Log.i(TAG, "Sending file " + fileName);
    tx = mFileTransfer.send(mPeerAgent, fileName);
    return tx;
  } catch (Exception e)
  {
  Log.i(TAG, "Cannot send file" + e.getMessage());
  }

}
return 0;
}

Tizen side:

function fileReceiveInt() {
var newFilePath = "downloads/file.zip";

var receivefilecallback =
{
onreceive: function(transferId, fileName)
{
console.log("Incoming file transfer request form the remote peer agent. transferId: " + transferId + " file name : " + fileName);

try {
gFileTransfer.receiveFile(transferId, newFilePath);
} catch(e) {
console.log("Error Exception, error name : " + e.name + ", error message : " + e.message);
}
},
onprogress: function(transferId, progress)
{
console.log("onprogress transferId: " + transferId + ", progress : " + progress);
},
oncomplete: function(transferId, localPath)
{
console.log("File transfer complete. transferId: " + transferId);
},
onerror: function(errorCode, transferId)
{
console.log("FileReceiveError transferId: " + transferId + " code : " + errorCode);
}
}


try {
console.log('setting recieve interface');
gFileTransfer = SAAgent.getSAFileTransfer();
gFileTransfer.setFileReceiveListener(receivefilecallback);

} catch (err) {
console.log('getSAFileTransfer exception <' + err.name + '> : ' + err.message);

}
}

I will always get onError in tizen with FILE_IO error :( I was testing gFileTransfer.receiveFile(transferId, ""); for default path, and File:///opt/usr/media/Downloads...

My tizen privileges:

<tizen:privilege name="http://tizen.org/privilege/content.read"/>
<tizen:privilege name="http://developer.samsung.com/privilege/accessoryprotocol"/>
<tizen:privilege name="http://tizen.org/privilege/content.write"/>
<tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
<tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>
<tizen:privilege name="http://tizen.org/privilege/unlimitedstorage"/>

Thanks in advance for any help.


Solution

  • Change both filepaths and it should work.

    Change Android's side to: String filename = Environment.getExternalStorageDirectory() + "/Download/TestRecipe2-25.zip";

    Change Tizen's side to: var newFilePath = "file:///opt/usr/media/Downloads/file.zip";