私のアンドロイドアプリがファイルの拡張ユーザー属性を取得して設定する方法はありますか?アンドロイドに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. 現在のユーザーをModelFormの属性に設定するにはどうすればよいですか?
- 2. RCP拡張ポイントで文字列属性を制限するにはどうすればよいですか?
- 3. AWS Cognitoのユーザー属性のデフォルト値を設定するにはどうすればよいですか?
- 4. XML:属性で拡張された基本単純要素に制限を設定するにはどうすればよいですか?
- 5. ストレージアクセスフレームワークで珍しいファイル拡張子を設定するにはどうすればよいですか?
- 6. BrowserXhrを拡張してAngular2でヘッダーを設定するにはどうすればよいですか?
- 7. PowerShellからWindows PATH変数拡張を設定するにはどうすればよいですか?
- 8. VSCodeで拡張機能のキーバインドを設定するにはどうすればよいですか?
- 9. Mac用のPaw HTTPクライアントで自動拡張を設定するにはどうすればよいですか?
- 10. VSCode拡張で言語のインデントオプションを設定するにはどうすればよいですか?
- 11. Androidエミュレータ2.0の拡張コントロールでキャッシュ設定を消去するにはどうすればよいですか?
- 12. Vaadinリクエスト内でLiferayのAPPLICATION_SCOPEに属性を設定するにはどうすればよいですか
- 13. コントローラにHttpServletRequest属性(インターセプタで設定)を挿入するにはどうすればよいですか?
- 14. Svelteでブール値属性を動的に設定するにはどうすればよいですか?
- 15. onClickイベントの後にpropで属性を設定するにはどうすればよいですか?
- 16. プログラムで作成されたボタンの属性を設定するにはどうすればよいですか?
- 17. フォームに異なるオブジェクトの属性を設定するにはどうすればよいですか?
- 18. 不明な画像拡張子のContentTypeを設定するにはどうすればよいですか?
- 19. Google Chrome拡張機能の設定を保存するにはどうすればよいですか?
- 20. NSAttributedString内のテキストに「非表示」属性を設定するにはどうすればよいですか?
- 21. divタグにvalue属性を設定するにはどうすればよいですか?
- 22. Mooseオブジェクトに複数の属性ビルダーを設定するにはどうすればよいですか?
- 23. Laravel5.0のコントローラメソッドに隠し属性を設定するにはどうすればよいですか?
- 24. DynamoDB属性を空のリストに設定するにはどうすればよいですか?
- 25. Salesforce Visualforceのapex:pageBlockの 'mode'属性を動的に設定するにはどうすればよいですか?
- 26. android:layout_alignParentLeft属性をコード内の画像ビューに設定するにはどうすればよいですか?
- 27. id属性をテーブルに設定するにはどうすればよいですか?
- 28. firebaseオブジェクトに複数の属性を設定するにはどうすればよいですか?
- 29. asp.netでユーザーコントロールを拡張するにはどうすればよいですか?
- 30. プライベートセットでプロトコルを拡張するにはどうすればよいですか?
:「操作トランスポートエンドポイントでサポートされていませんか」? – Blackbelt
Googleは、FATでサポートされている機能を超えて、エミュレートされているかどうかにかかわらず、外部ストレージで機能することを望んでいないためです。これにはシンボリックリンク、拡張属性などが含まれています。これはsdcardfsや他のカーネル機能でこれを強制します。デバイスをPCに接続して外部ストレージにアクセスすることができ、ユーザーがファイルを前後にコピーするとすべての情報が保持されることが予想されるため、これはおそらく、これを行うものです。 –
実際これはあなたの答えの一部でなければなりません – Blackbelt