如何访问android彩信资源,如视频/音频等?
问题描述:
我开始开发一个android应用程序,它必须与MMS附件进行交互,特别是获取诸如文本,位图,音频,视频等附件并将它们存储在手机中的特定文件夹中。如何访问android彩信资源,如视频/音频等?
所以我开始在网上看一些书和一些文章,但这不是一个非常普遍的论点,而且我也没有找到正式的方式去做我想做的事。
我发现了一个相当不错的文章在这里堆栈溢出这里:How to Read MMS Data in Android? ...它的作品对我非常好,但也有2个问题:
- 该文介绍了如何获得通过彩信数据查询“隐藏”的SMS-MMS内容提供商,据我所知,Google并不保证他们将保持当前每个Android未来发展的结构。
- 该文章仅解释如何从MMS获取文本数据和位图数据......视频/音频怎么样?我试图从InputStream中获得视频/音频流,比如Bitmap的例子,遗憾的是没有运气......
对于没有官方教程或“如何做”因为SMS和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();
}
通过这种方式,你可以提取“原始”数据,如音频/视频的传递从MMS /图片:
- ,你需要使用此功能
- 的URI上下文包含要提取的数据的MMS部分(例如“content:// mms/part/2”)
- byref参数返回过程抛出的最终错误代码。
一旦你有了你的byte [],你可以创建一个空文件,然后使用FileOutputStream将byte []写入它。如果文件路径\扩展名正确,并且您的应用具有所有权限 权限,则可以存储您的数据。
PS。这个过程已经过几次测试,并且工作正常,但是我不排除可能是一些可能产生错误状态的非托管异常情况。恕我直言,它也可以被改进...
感谢此代码段!它真的帮了我很多。访问MMS附件的代码示例很难找到! – jenzz 2012-09-08 22:25:13
感谢它为我工作。 :) – 2015-05-13 11:44:35