3

私は、Androidデバイスのデータディレクトリと外部領域にファイルをコピーする選択肢をユーザに与えたいと考えています。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 

答えて

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

彼の質問は内部ストレージについてです。外部ストレージへのあなたの許可 –

関連する問題