3

외부 영역뿐만 아니라 Android 장치 데이터 디렉토리에 파일을 복사 할 수있는 선택권을 사용자에게 부여하고 싶습니다.Android 장치 내부 영역에 파일을 복사하는 데 필요한 명시적인 권한이 필요합니까?

내 응용 프로그램이 파일을 내부 영역으로 복사 할 수있게하는 매니페스트에 추가해야 할 내용을 말해 줄 수 있습니까?

/data/data/your.app.package.name/myFiles에 파일을 저장할 계획이었습니다. 코드에서 File.DirInternal은 해당 위치로 변환됩니다.

File.DirRootExternal을 사용하면/mnt/sdcard로 이동하여 응용 프로그램이 손상되지 않습니다.

이것이 내가 매니페스트가 문제를 일으키는 것으로 생각한 이유입니다. 내가 File.DirInternal를 사용하는 경우 그것은이 라인에 충돌

는 :

Starting Job: Job1 
** Service (httputilsservice) Create ** 
** Service (httputilsservice) Start ** 
main_jobdone (java line: 518) 
java.io.IOException: Prepare failed.: status=0x1 
at android.media.MediaPlayer.prepare(Native Method) 
at anywheresoftware.b4a.objects.MediaPlayerWrapper.Load(MediaPlayerWrapper.java:79) 
at quran.repeater.main._jobdone(main.java:518) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:113) 
at anywheresoftware.b4a.BA.raiseEvent(BA.java:97) 
at anywheresoftware.b4a.keywords.Common.CallSub4(Common.java:772) 
at anywheresoftware.b4a.keywords.Common.CallSub2(Common.java:759) 
at quran.repeater.httputilsservice._processnexttask(httputilsservice.java:180) 
at quran.repeater.httputilsservice._response_streamfinish(httputilsservice.java:244) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:113) 
at anywheresoftware.b4a.BA$1.run(BA.java:218) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3647) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
at dalvik.system.NativeStart.main(Native Method) 
java.io.IOException: Prepare failed.: status=0x1 
: 여기
' Http sub routines. 
'------------------- 
Sub JobDone(Job As String) 

Select Job 
    Case "Job1" 

     If HttpUtils.IsSuccess(mp3Url) Then 
      Dim blnFolderMade As Boolean 

      mp3 = HttpUtils.GetInputStream(mp3Url) 

      timer1.Enabled = True 

      Dim out As OutputStream 
      out = File.OpenOutput(File.DirInternal,"114.mp3",False) 
      File.Copy2(mp3, out) 
      out.Close 

      ProgressBarDownloading.Visible = False 

      ToggleButtonPlayPause.Checked = True 
      ToggleButtonPlayPause.Enabled = True 
      blnCurrentPauseCheckedState = True 
      blnCurrentPauseEnabledState = True 

      mpTheMediaPlayer.Release 
      mpTheMediaPlayer.Initialize2("") 
      mpTheMediaPlayer.Load(File.DirInternal, "114.mp3") 
      mpTheMediaPlayer.Play 
     End If 
End Select 
End Sub 

는 로그에서 오류입니다 :

mpTheMediaPlayer.Load(File.DirInternal, "114.mp3") 

이 충돌하는 것 코드입니다

답변

3

Android의내부 저장소에 저장하는 방법에 대한 자세한 내용은문서를 참조하십시오.

당신이 의미하는 경우 :

/data/data/your.app.package.name/myFiles

그럼 당신은 별도의 권한은 필요하지 않습니다. 그것은 당신이 진정으로

/데이터 /을 myApp를 의미하는 경우에 당신이

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

필요하면 (그것은 확실히처럼 보이지 않는) 외부 저장 장치를 의미하는 경우 내부 스토리지

그냥 일반 쓰고/myFiles

그러면 답은 당신이 뿌리를 내리지 않고서는 안된다는 것입니다./data 폴더에 쓸 수있는 권한이 없습니다.

+0

예, /data/data/your.app.package에 복사를 시도하고 있습니다. .name/myFiles하지만 "준비 실패"오류가 발생합니다. 미디어 플레이어를 사용하여 재생하는 파일을 복사하려고합니다. 또한 내가 사용하고있는 장치가 루팅되어 있지만 사용자의 장치가 뿌리를 내릴지 확실하지 않습니다. –

+0

원본 게시물을 코드로 업데이트하고 스택 추적으로 예외를 수정하십시오. 그러면 살펴 보겠습니다. – kabuko

+0

답장을 보내 주셔서 감사합니다. 코드와 로그로 게시물을 업데이트했습니다. –

2
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

내부 저장소 또는 SD 카드 모두에 동일한 쓰기 권한이 있습니다. – dcanh121

+0

매우 빠른 답장을 보내 주셔서 감사합니다. 나는 그것을 한 동안 시도 할 것이다. –

+6

그의 질문은 내부 저장 장치에 관한 것입니다. 외장 스토리지에 대한 사용자의 허가 –

관련 문제