【问题标题】:Manifest permission needed to copy files to the Android device internal area?将文件复制到Android设备内部区域需要清单权限吗?
【发布时间】:2012-01-19 17:54:45
【问题描述】:

我想让用户选择将文件复制到 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

【问题讨论】:

    标签: android permissions android-manifest internal basic4android


    【解决方案1】:

    查看 Android 的 Data Storage 文档,了解有关保存到内部存储的详细信息。

    如果你的意思是:

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

    那么您不需要额外的权限。这只是对内部存储的常规写入

    如果您指的是外部存储(它肯定看起来不像),那么您需要

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

    如果你真的想

    /data/myApp/myFiles

    那么答案是你不能不被扎根。您没有写入 /data 文件夹的权限。

    【讨论】:

    • 是的,我正在尝试复制到 /data/data/your.app.package.name/myFiles 但我收到“准备失败”错误。我正在尝试复制使用媒体播放器播放的文件。我正在使用的设备也被植根,但我不确定用户的设备是否会被植根。
    • 用你的代码更新你的原始帖子,用堆栈跟踪更新你的异常,我会看看。
    • 感谢您的回复。我用代码和日志更新了帖子。
    • 似乎是 MediaPlayer 的问题,而不是存储问题。看到这些otherposts
    • 感谢您的回复。看起来我只需要坚持使用 File.DirRootExternal 作为放置文件的位置,因为它似乎是唯一可以播放 mp3 文件的位置,所以看起来媒体播放器不喜欢 File.DirInternal 位置。跨度>
    【解决方案2】:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    【讨论】:

    • 在内部存储或 SD 卡上写入的权限相同。
    • 感谢您的快速回复。一会儿我试试看。
    • 他的问题是关于内部存储的。您对外部存储的权限
    • 他指的是手机自带的默认存储空间(8GB/16GB/32GB),不是SD卡。
    • 它允许我将文件复制到 mnt/sdcard 但不能复制到 data/myApp/myFiles。是否有另一行信息需要进入清单文件?
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2011-07-29
    • 2021-10-12
    • 2015-04-09
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多