2

たくさんのグーグル検索の後、ジェスチャの作成と保存に使用しているジェスチャビルダーのソースコードを見た後、この質問を投稿しています。問題は、未加工のファイルから読み込んでいるジェスチャ ライブラリが正しく読み込まれることですが、新しいジェスチャを保存しようとすると失敗し、save メソッドが返されfalseました。確認gestureLibrary.isReadOnly()したところ も返さtrueれましたが、読み取り専用なので保存できないということですか? 外部ストレージと内部ストレージへの書き込みにすべての権限を使用しています。何か助けて?!

4

1 に答える 1

0

res フォルダ、つまり res/raw にあるジェスチャ ファイルを保存しようとすると、実行時にアプリケーション リソースを編集することは許可されていないため、保存できません。

したがって、ジェスチャ ファイルをアセットに配置し、アプリをインストールする電話に保存してから、GestureLibrary クラスの save メソッドを使用して問題を解決できます。

アセット ファイルを内部メモリに保存するコード:

File gestureFile=new File(directory.getPath(),"gesture");
try {
            InputStream is = getAssets().open("gestures");

            OutputStream os = new FileOutputStream(gestureFile);

            byte[] buffer = new byte[1024];
            int bytesRead;
            //read from is to buffer
            while((bytesRead = is.read(buffer)) !=-1){
                os.write(buffer, 0, bytesRead);
            }
            is.close();
            //flush OutputStream to write any buffered data to file
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

保存するコード:

mLibrary1=GestureLibraries.fromFile(new File(directory.getPath(),"gesture"));
mLibrary1.addGesture(strTemp,gesture);
            boolean temp= mLibrary1.save();
            if(temp){
                Toast.makeText(getApplicationContext(), "Saved",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(getApplicationContext(), " Not Saved",Toast.LENGTH_SHORT).show();
            }

お返事遅くなりましたがすみません。

于 2015-04-26T14:28:39.037 に答える