私はビデオ/オーディオデータをMMSから読み込むことができるので、MMSの添付ファイルを提供するこのクラスの部分を公開することにしました。
あなたが渡すことにより、このようなMMSからのオーディオ/ビデオ/画像などの「生」のデータを抽出することができます。このように
private static final int RAW_DATA_BLOCK_SIZE = 16384; //Set the block size used to write a ByteArrayOutputStream to byte[]
public static final int ERROR_IO_EXCEPTION = 1;
public static final int ERROR_FILE_NOT_FOUND = 2;
public static byte[] LoadRaw(Context context, Uri uri, int Error){
InputStream inputStream = null;
byte[] ret = new byte[0];
//Open inputStream from the specified URI
try {
inputStream = context.getContentResolver().openInputStream(uri);
//Try read from the InputStream
if(inputStream!=null)
ret = InputStreamToByteArray(inputStream);
}
catch (FileNotFoundException e1) {
Error = ERROR_FILE_NOT_FOUND;
}
catch (IOException e) {
Error = ERROR_IO_EXCEPTION;
}
finally{
if (inputStream != null) {
try {
inputStream.close();
}
catch (IOException e) {
//Problem on closing stream.
//The return state does not change.
Error = ERROR_IO_EXCEPTION;
}
}
}
//Return
return ret;
}
//Create a byte array from an open inputStream. Read blocks of RAW_DATA_BLOCK_SIZE byte
private static byte[] InputStreamToByteArray(InputStream inputStream) throws IOException{
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[RAW_DATA_BLOCK_SIZE];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
:
- あなたがのURIこの機能
- を使用する必要があるコンテキスト例えば、 "content:// mms/part/2"のような、抽出したいデータを含むMMSパート
- byrefパラメタは、プロシージャによってスローされる最終的なエラーコードを返します。
あなたがあなたのバイト[]を持っていれば、空のファイルを作成してからFileOutputStreamを使ってバイト[]を書き込むことができます。ファイルパス\拡張子が正しい場合、アプリケーションに右の 権限がすべてある場合は、データを保存することができます。
PS。この手順は数回テストされていましたが、機能しましたが、除外しないで、エラー状態を生成する可能性のあるいくつかのアンマネージ例外のケースがあります。 IMHOそれもまた改善されることができます...
このコードスニペットありがとう!それは本当に私を助けてくれました。 MMS添付ファイルにアクセスするコード例は見つけにくいです! – jenzz
私のために働いてくれてありがとう。 :) –