2016-05-29 6 views
0

私はJavaでアプリケーションを開発しています。このアプリケーションは、計測器によって生成された地理的なデータ(GPSが統合されています)を読み込んで表示します。私はそのようなデータの ".fit"形式でエクスポート機能を開発して、たくさんの無料アプリケーションでそれらを使用します。 私はこの"ANT +"のドキュメントとsdkの内容を読んでいますが、次のコードの開発に問題があります。ファイルは ".fit"形式で正しく生成されますが、このファイルは互換性がありません(Webアプリケーションまたはデスクトップアプリケーションでこのデータを読み取ることはできません)。あたかも何かが欠けているようです。 Javaにいくつかの例がありますが、SDKには入っていますが、明確ではありません。 は、コードがある ありがとうこの:Javaでは、GPSデバイスから ".fit"形式ファイルを書き込みます。働いていない。 ANT + SDK

FileEncoder encode; 
    try { 
    encode = new FileEncoder(new java.io.File(file.getAbsolutePath()+".fit"), Fit.ProtocolVersion.V2_0); 
    } catch (FitRuntimeException e) { 
    System.err.println("Error opening file " + file.getName()+".fit"); 
    return; 
    } 

    //Generate FileIdMessage 
    FileIdMesg fileIdMesg = new FileIdMesg(); // Every FIT file MUST contain a 'File ID' message as the first message 
    fileIdMesg.setManufacturer(15); 
    fileIdMesg.setType(com.garmin.fit.File.ACTIVITY); 
    fileIdMesg.setProduct(4); 
    fileIdMesg.setSerialNumber(1701L); 
    fileIdMesg.setTimeCreated(new DateTime(systemStartTime.getTime())); 
    fileIdMesg.setNumber(0); 

すべての「.fit」ファイルは、これを必要とするため、このコードが必要です。 docで説明されているように。

私はjavaのために次のコードを見つけました。

encode.write(fileIdMesg); // Encode the FileIDMesg 

    byte[] appId = new byte[] { 
    0x1, 0x1, 0x2, 0x3, 
    0x5, 0x8, 0xD, 0x15, 
    0x22, 0x37, 0x59, (byte)0x90, 
    (byte)0xE9, 0x79, 0x62, (byte)0xDB 
    }; 

    DeveloperDataIdMesg developerIdMesg = new DeveloperDataIdMesg(); 
    for(int i = 0; i < appId.length; i++) 
    { 
    developerIdMesg.setApplicationId(i, appId[i]); 
    } 
    developerIdMesg.setDeveloperDataIndex((short)0); 
    encode.write(developerIdMesg); 


    FieldDescriptionMesg fieldDescMesg = new FieldDescriptionMesg(); 
    fieldDescMesg.setDeveloperDataIndex((short)0); 
    fieldDescMesg.setFieldDefinitionNumber((short)0); 
    fieldDescMesg.setFitBaseTypeId((short)Fit.MAX_FIELD_SIZE); 
    fieldDescMesg.setFieldName(0, "Bepop2"); 
    fieldDescMesg.setUnits(0, "Bepop22"); 
    encode.write(fieldDescMesg); 

    RecordMesg record = new RecordMesg(); 
    DeveloperField doughnutsEarnedField = new DeveloperField(fieldDescMesg, developerIdMesg); 
    record.addDeveloperField(doughnutsEarnedField); 





// This is my code added to try to record something. 

Date d=new Date(); 

DateTime d2 =new DateTime(d.getTime()); 

    for (int ii=0;ii<ndatitot-2;ii++){ 

    record.timestampToDateTime((d.getTime())); 
    record.setTimestamp(d2); 
    record.setPositionLat(495280430+ii); 
    record.setPositionLong(-872696681+ii); 
    record.setHeartRate((short)140); 
    record.setCadence((short)88); 
    record.setDistance(2080f); 
    record.setSpeed(2800f); 

    doughnutsEarnedField.setValue(ii+1); 

    encode.write(record); 

答えて

1
ここFITフォーラムから私の答えを再投稿

https://www.thisisant.com/forum/viewthread/6501/

上記FITプロトコルの互換性に影響する変更をされて行われており、結果のファイルが正しくによって復号化されることはありませんようFit.ProtocolVersion.V2_0としてファイルのエンコーディング古い(すなわち、FITプロトコルバージョン1.0)デコーダである。

FIT 2.0は5月初めにベータ段階から出たため、FIT SDKを使用している多くのアプリケーションはまだ更新されていない可能性があります。

Fit.ProtocolVersion.V1_0を指定してエンコーダを作成すると、FITプロトコルバージョン1.0の互換ファイルが作成されます(2.0の機能は使用されないものとします)。

+0

ありがとうございました。私はエンコードのための1.0プロトコルを使用し、非常に良い仕事! – Theolo77

関連する問題