私のアンドロイドアプリがファイルの拡張ユーザー属性を取得して設定する方法はありますか?アンドロイドにjava.nio.file.Files
を使用する方法はありますか?私のdalvikアプリからsetfattr
とgetfattr
を使用する方法はありますか?私はアンドロイドがext4ファイルシステムを使用していることを知っているので、それは可能であるはずです。助言がありますか?アンドロイドファイルに拡張ユーザー属性を設定するにはどうすればよいですか?
12
A
答えて
12
Android JavaライブラリとBionic Cライブラリではサポートされていません。したがって、Linuxのシステムコールでネイティブコードを使用する必要があります。
ここでは、Android 4.2およびAndroid 4.4でテストを開始するためのサンプルコードを示します。
XAttrNative.java
package com.appfour.example;
import java.io.IOException;
public class XAttrNative {
static {
System.loadLibrary("xattr");
}
public static native void setxattr(String path, String key, String value) throws IOException;
}
xattr.c
#include <string.h>
#include <jni.h>
#include <asm/unistd.h>
#include <errno.h>
void Java_com_appfour_example_XAttrNative_setxattr(JNIEnv* env, jclass clazz,
jstring path, jstring key, jstring value) {
char* pathChars = (*env)->GetStringUTFChars(env, path, NULL);
char* keyChars = (*env)->GetStringUTFChars(env, key, NULL);
char* valueChars = (*env)->GetStringUTFChars(env, value, NULL);
int res = syscall(__NR_setxattr, pathChars, keyChars, valueChars,
strlen(valueChars), 0);
if (res != 0) {
jclass exClass = (*env)->FindClass(env, "java/io/IOException");
(*env)->ThrowNew(env, exClass, strerror(errno));
}
(*env)->ReleaseStringUTFChars(env, path, pathChars);
(*env)->ReleaseStringUTFChars(env, key, keyChars);
(*env)->ReleaseStringUTFChars(env, value, valueChars);
}
これは内部ストレージに正常に動作しなく上sdcardfsファイルシステムや他のカーネルを使用しています(エミュレート)外部ストレージシンボリックリンクや拡張属性など、FATファイルシステムでサポートされていない機能を無効にする機能。デバイスをPCに接続して外部ストレージにアクセスすることができ、ユーザーがファイルを前後にコピーするとすべての情報が保持されることが予想されるため、これはおそらく、これを行うものです。
だから、これは動作します:
File dataFile = new File(getFilesDir(),"test");
dataFile.createNewFile();
XAttrNative.setxattr(dataFile.getPath(), "user.testkey", "testvalue");
これはエラーメッセージを表示してIOException
をスローしながら:秒1つが例外をスローした理由
File externalStorageFile = new File(getExternalFilesDir(null),"test");
externalStorageFile.createNewFile();
XAttrNative.setxattr(externalStorageFile.getPath(), "user.testkey", "testvalue");
関連する問題
- 1. RCP拡張ポイントで文字列属性を制限するにはどうすればよいですか?
- 2. XML:属性で拡張された基本単純要素に制限を設定するにはどうすればよいですか?
- 3. PowerShellからWindows PATH変数拡張を設定するにはどうすればよいですか?
- 4. Androidエミュレータ2.0の拡張コントロールでキャッシュ設定を消去するにはどうすればよいですか?
- 5. Mac用のPaw HTTPクライアントで自動拡張を設定するにはどうすればよいですか?
- 6. divタグにvalue属性を設定するにはどうすればよいですか?
- 7. Mooseオブジェクトに複数の属性ビルダーを設定するにはどうすればよいですか?
- 8. NSAttributedString内のテキストに「非表示」属性を設定するにはどうすればよいですか?
- 9. Salesforce Visualforceのapex:pageBlockの 'mode'属性を動的に設定するにはどうすればよいですか?
- 10. android:layout_alignParentLeft属性をコード内の画像ビューに設定するにはどうすればよいですか?
- 11. Google Chrome拡張機能の設定を保存するにはどうすればよいですか?
- 12. PHPでNuSoapで属性を設定するにはどうすればよいですか?
- 13. Javascript:htmlタグに基づいてユーザー選択を拡張するにはどうすればよいですか?
- 14. asp.netでユーザーコントロールを拡張するにはどうすればよいですか?
- 15. 作成したJqueryダイアログボックス内で属性を設定するにはどうすればよいですか?
- 16. 分度器でwebElementの属性を設定するにはどうすればよいですか?
- 17. MarkdownでHTMLクラス属性を設定するにはどうすればよいですか?
- 18. djangoフォームでカスタムHTML属性を設定するにはどうすればよいですか?
- 19. プロパティデコレータを使用して属性を設定するにはどうすればよいですか?
- 20. scala.swingを拡張するにはどうすればよいですか?
- 21. jquery.mobile.scrollviewを拡張するにはどうすればよいですか?
- 22. コードイグナイターコントローラークラスを拡張するにはどうすればよいですか?
- 23. ブックマークバーを拡張するにはどうすればよいですか?
- 24. オプションのxcodatamodel属性を設定するにはどうすればよいですか?
- 25. HyperLinkウィジェットのrel属性を設定するにはどうすればよいですか?
- 26. アクションメソッドのカスタム属性のASP.NET MVCルーティングを設定するにはどうすればよいですか?
- 27. ディレクトリの隠し属性を設定するにはどうすればよいですか?
- 28. バリデータのValidatorEnable()javascript属性を設定するにはどうすればよいですか?
- 29. 年齢属性を正しく設定するにはどうすればよいですか?
- 30. Mooseでは、属性が設定されるたびに属性を変更するにはどうすればよいですか?
:「操作トランスポートエンドポイントでサポートされていませんか」? – Blackbelt
Googleは、FATでサポートされている機能を超えて、エミュレートされているかどうかにかかわらず、外部ストレージで機能することを望んでいないためです。これにはシンボリックリンク、拡張属性などが含まれています。これはsdcardfsや他のカーネル機能でこれを強制します。デバイスをPCに接続して外部ストレージにアクセスすることができ、ユーザーがファイルを前後にコピーするとすべての情報が保持されることが予想されるため、これはおそらく、これを行うものです。 –
実際これはあなたの答えの一部でなければなりません – Blackbelt