마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 폰에 저장된 파일 재생(경로 path 설정) [closed]

0 추천

초보 수준 질문입니다.

일단 교재의 코드를 보고 따라 하였습니다.

 

public class MainActivity extends AppCompatActivity {
....
public static final String VIDEO_URL = 
"https://sites.google.com/site/ubiaccessmobile/sample_video.mp4";
......
    protected void onCreate(Bundle savedInstanceState) {
        ...
            @Override
            public void onClick(View v) {
                videoView.setVideoURI(Uri.parse(VIDEO_URL));
                videoView.requestFocus();
                videoView.start();
그러면 잘 실행됩니다.
이제 저는 저의 핸드폰에 있는 동영상의 재생 해 보고자 합니다.
저장 위치는 SD 카드가 아닌 전화기의 메모리입니다.
내 파일에서 보면 내장메모리/Pictures 라고 보입니다.
디바이스 파일 익스프로러에서 보면 /storage/self/primary/Pictures 라고 보입니다.
 
"https://sites.google.com/site/ubiaccessmobile/sample_video.mp4"; 을 "
/storage/self/primary/Pictures/sample_video.mp4" 라고 수정 하였는데 
실행이 되지 않습니다. 
(재생하기 버튼을 누르면 "동영상을 재생 할 수 없습니다" 하고 나옵니다.)
 
logcat에서는 아래와 같습니다.
2022-01-13 15:30:10.523 14569-14569/? E/Zygote: 
isWhitelistProcess - Process is Whitelisted
2022-01-13 15:30:10.524 14569-14569/? E/Zygote: accessInfo : 1
2022-01-13 15:30:10.549 14569-14569/? E/wn.video.playe: 
Unknown bits set in runtime_flags: 0x8000
2022-01-13 15:30:10.523 14569-14569/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2022-01-13 15:30:10.524 14569-14569/? E/Zygote: accessInfo : 1
2022-01-13 15:30:10.549 14569-14569/? E/wn.video.playe: 
Unknown bits set in runtime_flags: 0x8000
2022-01-13 15:30:10.523 14569-14569/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2022-01-13 15:30:10.524 14569-14569/? E/Zygote: accessInfo : 1
2022-01-13 15:30:10.549 14569-14569/? E/wn.video.playe: 
Unknown bits set in runtime_flags: 0x8000
2022-01-13 15:30:22.373 14569-14569/org.techtown.video.player 
E/DecorView: mWindow.mActivityCurrentConfig is null
질문을 종료한 이유: 해결되었습니다.
원래자유 (470 포인트) 님이 2022년 1월 13일 질문
원래자유님이 2022년 2월 4일 closed

1개의 답변

+1 추천
 
채택된 답변
안드로이드에서는 앱의 내부 폴더가 아니면 마음대로 접근할 수 없습니다. Downolad같은 접근이 허용되는 공용폴더가 있는데, 이것도 안드로이드 버전에 따라 처리방법이 약간씩 달라질 수 있습니다. 이 파일 엑세스 부분은 최근 2-3년 사이에 가장 변경이 많은 부분 중의 하나라서, 보통 숙련된 개발자도 해당 기능을 아주 자주 사용하지 않으면 알기가 쉽지 않고, 개발자 문서를 참조해서 해결해야 합니다.

기본적으로 안드로이드에서 파일 처리하는 걸 참조하시고,

https://developer.android.com/guide/topics/data

그리고 안드로이드 SDK는 미디어 파일에 대해서는 별도의 API가 제공됩니다.

https://developer.android.com/training/data-storage/shared/media

저의 경우도 해당 부분은 개발자 문서를 한참 들여다 봐야 제대로된 구현이 가능합니다. 저보다 해당 부분에 대해 잘 아시는 분이 답을 주신다면 좋을 것 같네요.
spark (227,470 포인트) 님이 2022년 1월 13일 답변
원래자유님이 2022년 2월 3일 채택됨
감사합니다.
제가 수준 이하라서....

잘 모르지만 접근에 상당히 복잡한 제한이 있는 것은 알고 있는데
제가 접속 시도한 폴더와 파일은 제가 만든 어플에서 만들어서 저장한 폴더, 파일이니 그  어플에서 직접 읽을 수 있을 것으로 생각 하였습니다
어플에서 저장한 폴더이니 어플에서 읽을 수 있을 것으로 생각 하였습니다

감사합니다.
좀 더 공부해 보겠습니다.
앱 내부의 공간에서 생성한 폴더는 접근이 가능할 거예요. 다만 공유공간은 다른거죠. 그런데 질문에 있는 경로는 앱 내부 폴더가 아닌 듯 해서요. 애뮬레이터와 실제 디바이스 간에 좀 달라서 100% 확실하지는 않네요.
제가 알기로 전화기 메모리의 PICTURES 공간은 모든 앱에서 접근 가능하다고 알고 있어, 일단 그 메모리에 파일을 만들고, 읽어 보려고 했습니다. (작은 코드를 별도 프로젝트로 만들어 실행 해 보고, 잘 되면 이를 메일 코드 프로젝트에 가져다 붙이려면 메인 코드나 작은 코드 프로젝트에서 접속 가능한 폴더에서 시작하는 것이 나을 것 같아서 였습니다)
그 공유공간에 대한 정책이 Android 12부터 바뀐듯 해요. 아주 엄격하게. 아직 확인은 안해봤지만, 애뮬레이터에조차도 확인이 불가능하다는 글을 본적이 있어요.
저는 아래에 파일 만들어 저장 하였습니다.

핸드폰 내 파일 앱에서 본 경로: 내장 메모리 ==> Pictures ==> MyApp

윈도우 PC의 파일 탐색기로 본 경로: 내 PC\Galaxy Note9\Phone\Pictures\MyApp

안드로이드 스튜디오 Device File Explorer에서 본 경로: /sdcard/Pictures/MyApp
 (왜 좀 다른지 모르겠습니다)

코드는 다음과 같습니다.

String path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/MyApp";

감사합니다.
...