2011-01-11 3 views
4

アプリケーションのデフォルトファイルディレクトリ内にないアンドロイドの内部メモリにあるファイルに対してFileInputStreamを取得する方法。Androidの内部メモリファイルのFileInputStreamを取得するには?ファイルは私のカスタムフォルダ内のアプリケーションスペースに作られています

私は自分のアプリケーションスペースに新しいディレクトリを作成しました。したがってopenFileInput("filename")getFilesDir()のファイルに対してのみ機能します。そしてopenFileInput("filename")は、パス区切り文字 "/"で引数を受け付けないので、../myfolder/に変更することができます。

FileInputStreamを取得する方法はありますか? ..

注:通常のAPIを使用するFile = new File(...)は権限拒否エラーを示します。そして私はすでに私のカスタムフォルダのアクセス許可として与えられたContext.MODE_WORLD_WRITEABLEを作成しました。

それを明確にする: 私のファイルはここに "myfolderなど" ==>Context.MODE_WORLD_WRITEABLEパーミッションで作成されて==>/data/data/com.app.package/app_myfolder/file1.tmp です。

file1.tmpに開きます。 (通常、あなたのファイルは/data/data/com.app.package/files/file1.tmpgetFilesDir()のポイントは、このディレクトリにここにいる、そうもopenFileInput("")は、同じデフォルトのディレクトリに存在する引数を取ります。)

+0

ああ!実際問題はファイルのアクセス許可のようです。それは-rwxrwx ---を与えます。そのため、myappはそのファイルを読み取るためのアクセス権を持ちません。 MediaStore.ACTION_IMAGE_CAPTUREインテントのstartActivityForResult()の結果として、カメラアクティビティによってファイルが作成されたためです。だから私はこのアクセス許可を変更することができます何らかの方法はありますか?カメラアプリとmyappは異なるグループに属するので – Pritam

答えて

0

内のアプリケーションのデフォルトではありませんアンドロイドで内部メモリ内のファイルのためのFileInputStreamを取得する方法ファイルディレクトリ。

問題のファイルはMODE_WORLD_READABLEopenFileOutput()を使用して作成され、そして(任意のアプリは今、そのファイルを読むことができるので)それは非常に良いアイデアではありませんしない限り、あなたは、することはできません。 MediaStore.ACTION_IMAGE_CAPTURE意図用ファイルがstartActivityForResult(のための結果としてカメラ活性によって作成されたよう

)。

カメラのアクティビティでは、ファイルを外部ストレージに保存する必要がありますが、内部ストレージは保存しないでください。 EXTRA_OUTPUT extraを使用して、ファイルの保存先を指定します。

この権限を変更する方法はありますか?

「カメラアクティビティ」がAndroidファームウェアのものを参照していると仮定すると、ファームウェアを変更する必要があります。

+0

ありがとうございます。しかし、これを行うにあたっての私の努力は、SDカードが存在しないか、現在使用中の場合に外部ストレージを避けることでした。ここに私の質問http://stackoverflow.com/questions/4632231/is-there-any-way-to-store-full-size-image-returned-from-camera-activity-in-internのリンクです結果のために別のアクティビティを呼び出すと、その結果がどのように返されるかに依存します。この場合、アクセスする権限がない画像が表示されます(これは、内部メモリの場合のみです。 EXTRA_OUTPUTあなたはそれにすべてのアクセス権を持っています) – Pritam

+0

@ SimpleGuy:あなた自身のカメラアプリを書くことは大歓迎です。基本は特に難しいことではありません。次に、データをバイト配列として取得し、好きな場所に保存できます。ただし、外部アプリケーションを呼び出す場合、ユーザーとアプリケーションは相互にアクセス可能なデータストアを使用する必要があり、内部ストレージへの生のパスは適格ではありません。 – CommonsWare

+0

はい、それは本当です。私も同じことをしていました。ありがとうございました。 – Pritam

関連する問題