내 Android 앱이 파일의 확장 된 사용자 속성을 검색하고 설정하는 방법이 있습니까? 안드로이드에 java.nio.file.Files
을 사용할 수있는 방법이 있습니까? 내 dalvik 응용 프로그램에서 setfattr
및 getfattr
을 사용할 수 있습니까? 나는 안드로이드가 ext4 파일 시스템을 사용한다는 것을 알고 있으므로 가능한 것이어야한다. 어떤 제안?어떻게 확장 사용자 속성을 android 파일에 설정합니까?
12
A
답변
12
Android Java 라이브러리와 Bionic C 라이브러리는이를 지원하지 않습니다. 따라서 Linux syscalls를 사용하여 원시 코드를 사용해야합니다.
다음은 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;
}
이것은 sdcardfs 파일 시스템 또는 다른 커널을 사용 (에뮬레이트) 외부 저장소가 내부 저장에 잘 작동하지만
#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);
}
xattr.c 심볼릭 링크 및 확장 된 속성과 같은 FAT 파일 시스템에서 지원하지 않는 기능을 비활성화하는 기능. 컴퓨터를 장치에 연결하여 외부 저장소에 액세스 할 수 있고 사용자가 파일을 앞뒤로 복사하면 모든 정보가 보존되기 때문에 외부 장치가 PC에 연결되어 있기 때문에 가능하다고 생각할 수 있습니다.
그래서이 작품이 잠시
File dataFile = new File(getFilesDir(),"test");
dataFile.createNewFile();
XAttrNative.setxattr(dataFile.getPath(), "user.testkey", "testvalue");
는 오류 메시지와 함께 IOException
를 던졌습니다 : "작업 전송 엔드 포인트에서 지원되지 않습니다"
File externalStorageFile = new File(getExternalFilesDir(null),"test");
externalStorageFile.createNewFile();
XAttrNative.setxattr(externalStorageFile.getPath(), "user.testkey", "testvalue");
관련 문제
- 1. 조치 속성을 어떻게 설정합니까?
- 2. Android 2.2 - 어떻게 스피너의 알파 속성을 설정합니까?
- 3. X509 맞춤 확장 - 어떻게 설정합니까?
- 4. GridViewRowPresenter에서 ContentPresenter 속성을 어떻게 설정합니까?
- 5. 어떻게 사용자 정의 Android 대기 화면을 설정합니까?
- 6. SOAPpy에서 XML 속성을 어떻게 설정합니까?
- 7. _ViewStart.cshtml에서 ViewBag 속성을 어떻게 설정합니까?
- 8. javacode에서 MarginTop 속성을 어떻게 설정합니까?
- 9. Outlook.AppointmentItem에서받는 사람 속성을 어떻게 설정합니까?
- 10. JsonObject의 속성을 어떻게 동적으로 설정합니까?
- 11. 어떻게 실행 파일에 MOTW를 설정합니까
- 12. Android : TabHost를 어떻게 설정합니까?
- 13. AOSP 빌드에서 기본 속성을 어떻게 설정합니까?
- 14. Android : 레이아웃의 textize를 어떻게 설정합니까?
- 15. DevExpress (Winforms) 사용자 정의 스킨에서 선택 속성을 어떻게 설정합니까?
- 16. 어떻게 장고 양식에서 사용자 정의 HTML 속성을 설정합니까?
- 17. Android SDK에 AdWhirl을 어떻게 설정합니까?
- 18. Android 앱의 제목은 어떻게 설정합니까?
- 19. Volley에서 사용자 에이전트를 어떻게 설정합니까?
- 20. 어떻게 쿼리의 UniqueRecords 속성을 Yes로 설정합니까?
- 21. Silverlight : DataContractSerializer에서 PreserveObjectReferences 속성을 어떻게 설정합니까?
- 22. 어떻게 컨트롤의 속성을 xaml의 함수 주소로 설정합니까?
- 23. Java JPA 구현 - 속성을 어떻게 읽거나 설정합니까?
- 24. ActiveRecord 객체를 만들 때 어떻게 속성을 설정합니까?
- 25. 외부 NIB를로드하면 뷰 속성을 어떻게 설정합니까?
- 26. 조명기에서 동적 모델 속성을 어떻게 설정합니까?
- 27. csv에서 GeoJson 만들기 : 어떻게 지오메트리 속성을 설정합니까?
- 28. JTwitter에서 트위터 사용자 위치를 어떻게 설정합니까?
- 29. 사용자 정의 속성/값을 Android 매니페스트 파일에 어떻게 추가합니까?
- 30. EWS로 확장 (사용자 정의) 속성을 만들려면 어떻게해야합니까?
왜 두 번째 예외를 throw? – Blackbelt
Google은 FAT에서 지원하는 기능 외에 외부 저장 장치에서 작동하는 기능을 원하지 않으므로 에뮬레이션을 사용하거나 사용하지 않습니다. 그것은 심볼릭 링크, 확장 된 속성을 포함합니다 ... 그들은 sdcardfs와 다른 커널 기능으로이를 시행합니다. 컴퓨터를 장치에 연결하여 외부 저장소에 액세스 할 수 있고 사용자가 파일을 앞뒤로 복사하면 모든 정보가 보존되기 때문에 외부 장치가 PC에 연결되어 있기 때문에 가능하다고 생각할 수 있습니다. –
실제로 이것은 당신의 대답의 일부분이어야합니다 – Blackbelt