AndroidでMediaRecorderでストレージアクセスフレームワーク(SAF)を使用したいと考えています。しかし、SAFスキームの下では、絶対パスに頼るべきではなく、これまでに権限を持っていたUriに依存するべきです。ストレージアクセスフレームワーク内のMediaRecorderのSetOutputFile
どのようにうまくいくのですか?AndroidのSAFの新しいアプローチで一貫してMediaRecorderを使用するにはどうすればよいですか? あなたはここからスタート(よく文書)出発点として、言ってみましょう:
List<UriPermission> permission= getContentResolver().getPersistedUriPermissions();
そして、あなたがそこに取得したい:
mMediaRecorder.setOutputFile(/*Some arguments*/);
mMediaRecorder.prepare();
中間ステップは何ですか?
openFileDescriptorはandroid.net.ParcelFileDescriptorを返し、setOutputFileはjava.io.FileDescriptorをとります。私が見るところでは、システムは変換を許可しません。何か不足していますか?ご回答どうもありがとうございました。 –
ええ、私は覚えています、私はこれを直前に試しました:FileDescriptor fileDescriptor = getContentResolver()。openFileDescriptor(mUri、 "rwt")。getFileDescriptor();しかし、私はこれを取得:E/JavaBinder:***キャッチリモート例外! (例外はプロセス間ではまだサポートされていません) java.lang.StringIndexOutOfBoundsException:length = 21; regionStart = 0; regionLength = -1 at java.lang.String.startEndAndLength ... –
@SylOR:メッセージが何を意味するのか分かりません。 FWIW、[このサンプルアプリケーション](https://github.com/commonsguy/cw-omnibus/tree/v8.7/Media/AudioRecordStream)では、 'MediaRecorder'で' FileDescriptor'を使用しています。私の場合は、シークをサポートしていない 'ParcelFileDescriptor'パイプを使用しています。私のサンプルは、 'RAW_AMR'を記録しているので動作しますが、シークは必要ありません。最後に、 'FileDescriptor'アプローチがうまくいかない場合は、最初に普通のファイルに記録し、次にメディアを' Uri'で指定されたコンテンツにコピーする必要があります。 – CommonsWare