如何在 Tizen Gear S2 本地文件系统上写入文本文件?

How to write text file on Tizen Gear S2 local file system?

我正在 Samsung Gear S2 上开发本机应用程序,旨在将设备上传感器(加速度计)的数据记录到本地文件系统中。

我尝试了目录 (/opt/usr/media/documents/text.txt),但它没有在设备上创建文件。

我已启用权限:http://tizen.org/privilege/mediastorage。 下面的代码片段:

static char* write_file(const char* buf)
{
    FILE *fp;
    fp = fopen("/opt/usr/media/documents/text.txt","w");
    fputs(buf,fp);
    fclose(fp);
}

static void btn_write_cb(void *data, Evas_Object *obj, void *event_info)
{
    appdata_s *ad = data;
    buf="string to write";
    write_file(buf);
}

write方法是做什么的?或者 Web 应用程序可以完成这项任务? 谢谢

  1. 在 Tizen 中即使使用 http://tizen.org/privilege/mediastorage 也无法在某处创建文件。首先尝试将文件写入您的应用程序绝对具有写入权限的 app_get_shared_data_path() 文件夹 (/opt/usr/apps/<your_app_package_name>/shared/data)(可能是您的应用程序没有对 /opt/usr/media/ 文件夹的写入权限)。
  2. 无论如何,如果文件的所有路径 (/opt/usr/media/documents) 都不存在(在我的 Gear S2 上,该路径上没有 "documents" 文件夹),您将无法创建文件。

也添加这些权限

<tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
<tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>

也许您可以将路径更改为 /opt/usr/media/text.txt 并检查文件是否已创建。

Web 应用程序实际上非常适合此目的,下面是示例代码片段:

function fileStorage() {
    var documentsDir, newFile;

    function onOpenSuccess(fs) {
        fs.write("This is gonna written into the file");
        fs.close();
    }

    try {
        tizen.filesystem.resolve('internal0', function(result) {
            documentsDir = result;
            newFile = documentsDir.createFile('filename.txt');
            if (newFile) {
                newFile.openStream('rw', onOpenSuccess, null, 'UTF-8');
            }
        });
    } catch (e) {
        console.log(e);
    }
}

Web API 可能适用于这种情况。但是,如果您不想切换到 Web App Development,那么您可以尝试使用 Preference API。它将为您提供在共享内存中存储传感器数据并从中检索数据的便利。

您也可以通过以下链接详细了解如何使用首选项API。

  1. Ref. Link 1
  2. Ref. Link 2

希望有用。

我终于可以通过 Tizen Native App Development 在我的 Samsung Gear S2 Classic 中写入文件了。地址:/opt/usr/media/text.txt。并使用了特权http://tizen.org/privilege/mediastorage。这是我的代码片段。


static void
app_get_data(const char *res_file_in, char *res_path_out, int res_path_max)
{
    char *res_path = NULL;
    res_path= "/opt/usr/media/";
    if (res_path) 
    {
        snprintf(res_path_out, res_path_max, "%s%s", res_path, res_file_in);
        //free(res_path); //Disabling this statement works for me.
    }
}

static char*
write_file(const char* filepath, const char* buf)
{
    FILE *fp;
    fp = fopen(filepath, "w"); 
    fputs(buf, fp);
    fclose(fp);
}

static void
btn_write_cb(void *data, Evas_Object *obj, void *event_info)
{
    appdata_s *ad = data;
    char *buf = NULL;
    buf="Hello";
    char filepath[PATH_MAX] = { 0, };
    app_get_data("text.txt", filepath, PATH_MAX);
    write_file(filepath, buf);
}