2016-08-14 1 views
0

Android 6.0.1, API 23,SAF (스토리지 액세스 프레임 워크)는 USB 스틱을 어떻게 인식합니까?

일치하는 모든 문서 제공 업체 (USB 스틱 포함)를 표시하는 SAF 선택 도구에서 Android 폰에 연결된 USB 스틱을 어떻게 표시합니까? 또한 USB 휴대용 저장소에 파일과 폴더를 만들기 위해 SAF를 설정하는 방법 ?? SAF-documentation에서

, 나는 시도 :

public void performFileSearch() { 

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 

    intent.addCategory(Intent.CATEGORY_OPENABLE); 

    // in my case, showing only text-files is enough, therefore I guess the type is as follows: 
    intent.setType("text/plain"); 

    startActivityForResult(intent, READ_REQUEST_CODE); 
} 

그러나 USB 휴대용 저장 피커의 선택의 일부가 아닌 ...

내가 무엇을 놓치고? 필요한 단계를 보여주는 예제 프로젝트가 있습니까? 내 작은 변화를 포함하여 -

(found here 등) APP가 시작 SAF-클라이언트를 갖는

@CommonsWare : 여기에 원하는 스크린 샷 :

enter image description here

+0

"나는 무엇이 있습니까?" -'ACTION_OPEN_DOCUMENT' UI에서보고있는 것을 보여주는 스크린 샷이 누락되었습니다. "필요한 단계를 보여주는 예제 프로젝트가 있습니까?" - [이 샘플 앱] (https://github.com/commonsguy/cw-omnibus/tree/master/Documents/TinyTextEditor)은 파일을 만들거나 열 수있는 USB-OTG 드라이브가있는 Nexus 5X에서 정상적으로 작동합니다. 당신이 가지고있는 것과 같은 코드를 사용합니다. – CommonsWare

+0

고맙습니다 - 나는 당신의 프로젝트를 보게 될 것입니다. 지금은 안드로이드에서 SAF 세상을 처음 접하는 이래로 샘플 프로젝트가 없습니다. 나에게 가장 혼란스러운 것은 내 앱이 USB 드라이브에 액세스하는 방법이다. ?? SAF-DocumentProvider를 제공하는 두 번째 응용 프로그램이 필요하거나 내 응용 프로그램에서도이를 수행 할 수 있습니까? 그렇다면 정확히 얼마나됩니까? 내가 누락 된 것은 내 앱이 연결된 모든 USB 드라이브를 인식하는 방법이다. 무슨 권한과 SAF 방식의 관점에서 정확히 필요합니까 ??? – iKK

+0

"내게 가장 혼란스러운 점은 내 앱이 USB 드라이브에 어떻게 액세스 할 수 있을까요?" - 당신은'ContentResolver','DocumentFile' 등과 함께 사용하는'onActivityResult()'에'Uri'를 돌려받을 것입니다. "SAF-DocumentProvider를 제공하는 두번째 App이 필요하거나 내 App이 그것을 할 수 있습니까? 뿐만 아니라 - 그렇다면 얼마나 정확하게? " - 장치에 의해 제공됩니다. 장치가 그렇게하지 않으면 장치 제조업체 나 사용자 지정 ROM 개발자가 뭔가를 망쳤습니다. 다시 말하지만, 코드는 괜찮습니다. 이것은 당신이보고있는 스크린 샷을 게시 할 것을 제안하는 이유입니다. – CommonsWare

답변

1

난 그냥 문제에 대한 해결책을 발견 내부 performFileSearch() (예 : intent.setType("text/plain"); 원래 DevBytesample에서 대신 intent.setType("image/*");, 해결책은 다음과 같습니다 :

"설정"(예 : 수직 점 3 개)을 선택할 수 있습니다. "내부 저장소 표시"-이게 전부입니다!

그런 다음 SAF의 ContentProvider 선택기에서 원하는대로 모든 USB 스틱을 연결하면됩니다 (아래 스크린 샷 참조).

... 외장형 USB 스틱이 "내부 저장 장치"로 된 이유는 무엇입니까? ??? (누군가가 그 수수께끼에 대한 답을 알고 있다면, 나는 그것을 매우 고맙게 생각합니다!) 어쨌든, 마침내 USB 플래시가 나타나게되어 기쁩니다 !!

enter image description here

+1

아, 나는 이것이 토글 될 수 있다는 것을 잊고있다. 그래서 나는 그것을보고있는 중이다. " 저는 SAF의 이러한 측면을 싫어합니다. 이 경우 "내부"는 기본적으로 "파일 시스템"을 의미합니다. Google 드라이브를 설정했거나 보관 용 또는 여러 가지 다른 앱이있는 경우 '내부'저장 용량의 사용 여부에 관계없이 선택기에 표시됩니다. 이것에 대해 잊어 버린 것에 대해 사과드립니다. – CommonsWare

+0

그럴 이유가 없습니다. 어쨌든 screeenshots를 주장하여 많은 도움을주었습니다 :) 그리고 코드가 괜찮다는 언급도있었습니다. 그게 도움이 됐어! 고맙습니다. – iKK

+0

아직 SAF를 지원하지 않기 때문에 보관 용 계정이 나타나지 않습니다. Dropbox를 나타나게하려면'ACTION_GET_CONTENT' 인 텐트를 보내야합니다. –

관련 문제