Я нашел довольно простой способ чтения видео / аудио данных из 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();
}
Таким образом, вы можете извлечь «сырые» данные, такие как аудио / видео / изображения из MMS, передав:
- контекст, в котором вам нужно использовать эту функцию
- URI части MMS, которая содержит данные, которые вы хотите извлечь (например, "content: // mms / part / 2")
- параметр byref, который возвращает возможный код ошибки, выданный процедурой.
Получив свой байт [], вы можете создать пустой файл и затем использовать FileOutputStream, чтобы записать в него байт []. Если путь к файлу \ расширение является правильным и если ваше приложение имеет все права
разрешения, вы сможете хранить свои данные.
PS. Эта процедура была протестирована несколько раз, и она работала, но я не исключаю, что могут быть некоторые неуправляемые исключения, которые могут привести к ошибочным состояниям. ИМХО это тоже можно импровизировать ...