Требуется ли разрешение для копирования файлов во внутреннюю область устройства Android? - PullRequest
3 голосов
/ 19 января 2012

Я хотел бы дать пользователю возможность копировать файлы в каталог данных устройства Android, а также во внешнюю область.

Можете ли вы сказать мне, что мне нужно добавить в манифест, который позволит моимприложение для копирования файлов во внутреннюю область?

Я планировал хранить файлы в /data/data/your.app.package.name/myFiles.В этом коде File.DirInternal переводится в это место.

Если я использую File.DirRootExternal, он переходит в / mnt / sdcard, которая не приводит к сбою приложения.

Вот почему я подумал, чтоМанифест вызывал проблему.

В этой строке происходит сбой, если я использую File.DirInternal:

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

Это код сбоя:

' 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

Здесьэто ошибка из логов:

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

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Посмотрите на Android Data Storage doc для подробностей о сохранении во внутреннюю память.

Если вы имели в виду:

/ данные / данные / your.app.package.name / MYFILES

Тогда вам не нужны дополнительные разрешения. Это просто обычная запись во внутреннюю память

Если вы имели в виду внешнее хранилище (которое, конечно, не выглядит), тогда вам нужно

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

Если вы действительно имели в виду

/ данные / MYAPP / MYFILES

Тогда ответ в том, что вы не можете без рута. У вас нет прав для записи в папку / data.

2 голосов
/ 19 января 2012
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...