保存从Android Wear接收的DataItemAsset

保存从Android Wear接收的DataItemAsset,android,wear-os,android-wear-data-api,Android,Wear Os,Android Wear Data Api,我对安卓系统比较陌生。我正在将一个文件从安卓Wear设备传输到手机,我是通过PutDataRequest完成的。在手机端,我得到了一个dataitemaset,它可以使用Wearable.DataApi.getFdForAsset()为我提供一个文件描述符。我的问题是如何将此文件保存到外部存储 谢谢大家! 以下是我如何将一个文本文件从Android Wear watch上传到配对手机的过程。也许有一个更简单的方法,但这对我来说是有效的 (1) 在监视端,创建一个文本文件,并将其读入一个资产,您可

我对安卓系统比较陌生。我正在将一个文件从安卓Wear设备传输到手机,我是通过
PutDataRequest
完成的。在手机端,我得到了一个
dataitemaset
,它可以使用
Wearable.DataApi.getFdForAsset()
为我提供一个文件描述符。我的问题是如何将此文件保存到外部存储


谢谢大家!

以下是我如何将一个文本文件从Android Wear watch上传到配对手机的过程。也许有一个更简单的方法,但这对我来说是有效的

(1) 在监视端,创建一个文本文件,并将其读入一个资产,您可以通过DataApi将其放入:

public void SendTextFile()
{
    // Get folder for output
    File sdcard = Environment.getExternalStorageDirectory();
    File dir = new File(sdcard.getAbsolutePath()+ "/MyAppFolder/");
    if (!dir.exists()) {dir.mkdirs();} // Create folder if needed
    final File file = new File(dir, "test.txt");
    if (file.exists()) file.delete();

    // Write a text file to external storage on the watch
    try {
        Date now = new Date();
        long nTime = now.getTime();
        FileOutputStream fOut = new FileOutputStream(file);
        PrintStream ps = new PrintStream(fOut);
        ps.println("Time = "+Long.toString(nTime)); // A value that changes each time
        ps.close();
    } catch (Exception e) {
    }

    // Read the text file into a byte array
    FileInputStream fileInputStream = null;
    byte[] bFile = new byte[(int) file.length()];
    try {
        fileInputStream = new FileInputStream(file);
        fileInputStream.read(bFile);
        fileInputStream.close();
    } catch (Exception e) {
    }

    // Create an Asset from the byte array, and send it via the DataApi
    Asset asset = Asset.createFromBytes(bFile);
    PutDataMapRequest dataMap = PutDataMapRequest.create("/txt");
    dataMap.getDataMap().putAsset("com.example.company.key.TXT", asset);
    PutDataRequest request = dataMap.asPutDataRequest();
    PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
            .putDataItem(mGoogleApiClient, request);
}
您还需要在清单两端添加以下权限才能写入外部存储:android.permission.write_external_storage

注意:要注意的最令人沮丧的事情是:如果数据没有更改,就不会发生传输。因此,当您测试是否编写了两次相同的数据文件内容时,它只会在第一次遇到-即使您从第一次运行中删除了该文件。我为DataApi的这个阴险特性浪费了好几个小时!这就是我上面的代码将当前时间写入文本文件的原因

当然,还要确保您设置了GoogleAppClient对象以连接、添加侦听器等,如下所述:

以下是我如何将一个文本文件从Android Wear watch上传到配对手机的过程。也许有一个更简单的方法,但这对我来说是有效的

(1) 在监视端,创建一个文本文件,并将其读入一个资产,您可以通过DataApi将其放入:

public void SendTextFile()
{
    // Get folder for output
    File sdcard = Environment.getExternalStorageDirectory();
    File dir = new File(sdcard.getAbsolutePath()+ "/MyAppFolder/");
    if (!dir.exists()) {dir.mkdirs();} // Create folder if needed
    final File file = new File(dir, "test.txt");
    if (file.exists()) file.delete();

    // Write a text file to external storage on the watch
    try {
        Date now = new Date();
        long nTime = now.getTime();
        FileOutputStream fOut = new FileOutputStream(file);
        PrintStream ps = new PrintStream(fOut);
        ps.println("Time = "+Long.toString(nTime)); // A value that changes each time
        ps.close();
    } catch (Exception e) {
    }

    // Read the text file into a byte array
    FileInputStream fileInputStream = null;
    byte[] bFile = new byte[(int) file.length()];
    try {
        fileInputStream = new FileInputStream(file);
        fileInputStream.read(bFile);
        fileInputStream.close();
    } catch (Exception e) {
    }

    // Create an Asset from the byte array, and send it via the DataApi
    Asset asset = Asset.createFromBytes(bFile);
    PutDataMapRequest dataMap = PutDataMapRequest.create("/txt");
    dataMap.getDataMap().putAsset("com.example.company.key.TXT", asset);
    PutDataRequest request = dataMap.asPutDataRequest();
    PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
            .putDataItem(mGoogleApiClient, request);
}
您还需要在清单两端添加以下权限才能写入外部存储:android.permission.write_external_storage

注意:要注意的最令人沮丧的事情是:如果数据没有更改,就不会发生传输。因此,当您测试是否编写了两次相同的数据文件内容时,它只会在第一次遇到-即使您从第一次运行中删除了该文件。我为DataApi的这个阴险特性浪费了好几个小时!这就是我上面的代码将当前时间写入文本文件的原因

当然,还要确保您设置了GoogleAppClient对象以连接、添加侦听器等,如下所述: